学习JavaWeb遇到了一些问题,怀疑是和JDBC相关的
问题描述:我根据BaseDAO写了两个实现类的代码,通过BaseDAO传入的可变参数填充占位符,但是有一个可以实现查询,有一个只能查询到空值,通过调试,我发现两段代码都能正确的预编译SQL语句,但是其中一个查询的结果集总是为空的
希望各位好兄弟能指点一二
这边是我BaseDAO的代码
//有事务版本的通用的返回多个对象查询方法
public List getForList(Connection connection, String sql, Object ...args){
//Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//connection = JDBCutil.getConnection();
preparedStatement = connection.prepareStatement(sql);
//填充占位符
for (int i = 0;i < args.length;i++){
preparedStatement.setObject(i+1,args[i]);
}
//返回结果集
resultSet = preparedStatement.executeQuery();
//获取结果集元数据
ResultSetMetaData metaData = resultSet.getMetaData();
//获取结果集当前里面的列数
int columnCount = metaData.getColumnCount();
ArrayList list = new ArrayList<>();
while (resultSet.next()){
T t = (T) clazz.newInstance();
//处理这一行数据的每一列
for(int i = 0;i < columnCount;i++){
//获取这列的数值
Object object = resultSet.getObject(i + 1);
//获取这列的名字(数据库表中)
//String columnName = metaData.getColumnName(i + 1);
String columnLabel = metaData.getColumnLabel(i + 1);
//调用方法,通过列名查询到该字段,并且返回一个filed对象
Field declaredField = t.getClass().getDeclaredField(columnLabel);
//提高反射权限
declaredField.setAccessible(true);
//给当前根据列名字查询到的filed对象赋值
declaredField.set(t,object);
}
list.add(t);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭资源
//JDBCutil.closeResource(connection,preparedStatement,resultSet);
JDBCutil.closeResource(null,preparedStatement,resultSet);
}
return null;
}
这边是我实现类查询为空的代码
@Override
public List getByNewPage(Connection connection, String keyword, int pageNo) {
String sql = "select id,name,price,count,remark from fruit where name = ? or remark = ? limit ?, 5";
List forList = getForList(connection, sql, keyword,keyword,(pageNo-1)*5);
return forList;
}
这边是我实现类可以查询到数据的代码
@Override
public List getByPage(Connection connection, int pageNo) {
String sql = "select id,name,price,count,remark from fruit limit ?, 5";
List forList = getForList(connection, sql, (pageNo-1)*5);
return forList;
}
1.直接在数据库执行没数据的sql,看是否有数据
2.如果数据库查询有数据,说明数据查到后,在代码里进行赋值时有问题
3.大概率是传参导致的sql查不到数据
一个没带where条件所以有数据;
另一个带有where条件,如果没有满足where条件的数据就是空结果集。
望采纳,谢谢!