Should I Move Methods To A Different Class
Well, Your code looks good, and your suspicion seems right. I would agree with you. My reasoning is that your objects should be modeled after the problem rather than the data base schema. Here I would say that the other getTbl* methods are actually getters on particular animals. So it makes sense to move them to Animal class and rename the getTbl* methods accordingly, i.e getAnimalVaccinationList.

I would also recommend to refactor all these methods so that the db connect, and processing are in a different method,

public static ArrayList&lt;Integer&gt; runDbQuery(String query, String field) throws DbException {
    try {
      CC_H2 db = new CC_H2();
      db.Connect(Variables.getStrConn(), Variables.getStrUser(),
            Variables.getStrPassword(), "Embedded");
      ResultSet rs = db.query(query);
      ArrayList&lt;Integer&gt; lst = new ArrayList&lt;Integer&gt;();
      while (rs.next()) {
        lst.add(new Vaccination(rs.getInt(field)));
      }
      db.Disconnect();
      return lst;
    } catch(SpecificException e) {
      // Do not throw exception, process the exception and throw
      // some thing relevant to your program.
      throw new DbException(e);
    }
}


and use this in other methods to avoid repetition. I would also recommend moving the getTblHerd to another class - say Herd because it has an independent identity other than db_tables.

Here is an example of using the above method

public static ArrayList&lt;Note&gt; getTblNotes(int intID) throws DbException {
    String query = "Select NOTE_ID FROM tblNotes WHERE NOTE_HERD_ID = "
                    + intID + " ORDER BY Note_Date DESC";

    ArrayList&lt;Note&gt; alNotes = new ArrayList&lt;Note&gt;();
    for (Integer i : runQuery(query, "NOTE_ID")) { 
        alNotes.add(new Note(i));
    }
    return alNotes;
}