générique DAO en java

Je suis en train de développer générique DAO en java. J'ai essayé ce qui suit. Est-ce
une bonne façon de mettre en œuvre générique DAO? Je ne veux pas utiliser la mise en veille prolongée. Je suis en train de faire elle aussi générique que possible, de sorte que je n'ai pas à répéter le même code plusieurs fois.

public abstract class  AbstractDAO<T> {

    protected ResultSet findbyId(String tablename, Integer id){
        ResultSet rs= null;
        try {
           //the following lines are not working
            pStmt = cn.prepareStatement("SELECT * FROM "+ tablename+ "WHERE id = ?");
            pStmt.setInt(1, id);
            rs = pStmt.executeQuery();


        } catch (SQLException ex) {
            System.out.println("ERROR in findbyid " +ex.getMessage() +ex.getCause());
            ex.printStackTrace();
        }finally{
            return rs;
        }

    }

}

Maintenant j'ai:

public class UserDAO extends AbstractDAO<User>{

  public List<User> findbyid(int id){
   Resultset rs =findbyid("USERS",id) //"USERS" is table name in DB
   List<Users> users = convertToList(rs);
   return users; 
}


 private List<User> convertToList(ResultSet rs)  {
        List<User> userList= new ArrayList();
        User user= new User();;
        try {
            while (rs.next()) {
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setFname(rs.getString("fname"));
                user.setLname(rs.getString("lname"));
                user.setUsertype(rs.getInt("usertype"));
                user.setPasswd(rs.getString("passwd"));
                userList.add(user);
            }
        } catch (SQLException ex) {
            Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return userList;

    }
}
quel est le problème?
plz voir la ligne suivante: / / lins à ne pas travailler;
Pourquoi ne voulez-vous pas utiliser la mise en veille prolongée (ou d'autres ORM)?
Je peux comprendre ne pas vouloir utiliser Hibernate 🙂
Méfiez-vous que vous avez d'appeler close() sur JDBC objets tels que des ResultSet lorsque vous avez terminé avec eux. Où allez-vous appeler close() sur votre ResultSet?

OriginalL'auteur akshay | 2010-05-17