JDBC与DBUtils的区别

说明:编译环境Eclipse(java)+MySql


使用JDBC查询数据库最不方便的一个地方在于,JDBC的executeQuey方法得到的是结果是一个结果集(ResultSet),实际应用时,需要用遍历的方法把一个个对象从ResultSet中取出来

//rs为ResultSet对象
rs = stmt.executeQuery();
//将Result转换成List
int colCount = rs.getMetaData().getColumnCount();//得到查出的列的数量
while(rs.next()){
	Object[] oArr = new Object[colCount];//对应数据表中的一行,然后每一列都对应数组中的一个元素
	for (int i = 0; i < oArr.length; i++) {
		oArr[i] = rs.getObject(i+1);
	}
	list.add(oArr);//把取得的对象放入list中
}


 对于自定义的类,还要进行类型转换,这时,可利用RowMapper接口 
  

public class UserRowMapper implements RowMapper {

	@Override
	public Caller getEntity(ResultSet rs) throws SQLException {
		User user=new User()
		
		user.setId(rs.getInt("C_ID"));
		user.setCno(rs.getString("C_NO"));
		user.setCname(rs.getString("C_NAME"));
		user.setPassword(rs.getString("C_PASSWORD"));
		
		return user;
	}

}
while(rs.next()){
	User user= rm.getEntity(User);//RowMapperrm=new UserRowMapper();
	list.add(user);//把取得的对象放入list中

}

但是,每个类都需要一个与之对应的rowMapper,自定义的类比较多时也是很累的……

DBUtils就可以解决这个问题,只需要定义

ResultSetHandler> h = new BeanListHandler(Person.class);
执行的时候传进去就可以了,方便很多!!

List persons = run.query("SELECT * FROM Person", h);

但是,使用过程中却发现一个问题。

使用DBUtils时,类中的属性名和数据库中的表中的字段名必须一致,否则查询出来的数据和类中属性无法对应!!



你可能感兴趣的:(java学习笔记,DBUtils,JDBC,java)