【发布时间】:2011-02-20 09:05:37
【问题描述】:
我正在尝试在 java 中开发通用 DAO。我尝试了以下方法。这是 实现通用 DAO 的好方法?我不想使用休眠。我试图使其尽可能通用,这样我就不必一遍又一遍地重复相同的代码。
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;
}
}
}
现在我有:
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;
}
}
【问题讨论】:
-
请看这行说 // 以下 lins in not working;
-
为什么不想使用 Hibernate(或其他 ORM)?
-
我可以理解不想使用 Hibernate :-)
-
请注意,当您处理完 JDBC 对象(例如
ResultSet)后,您必须调用close()。你打算在你的ResultSet上给close()打电话?
标签: java dao genericdao