gpt4 book ai didi

java - 结果集不会进入 while 循环并设置值

转载 作者:行者123 更新时间:2023-12-02 00:07:01 24 4
gpt4 key购买 nike

观察这段代码的奇怪行为,因为结果集没有给出 null 值(执行 SOP 很清楚)但没有进入 while 循环(这很奇怪!)而且它是简单的 dao 类,它是无法设置用户对象中的值:

public class DAO{

public List<User> searchAllUsers(int offset ,int noOfRecords, String column, String value){
String query="select SQL_CALC_FOUND_ROWS * from info where '"+column+"' like '%"+value+"%' order by serialNo asc limit " + offset + " , " + noOfRecords;
// String query="select * from info where '"+select+"' like '%"+search+"%' order by serialNo asc";
System.out.println("1");
List<User> list = new ArrayList<User>();
User user=null;

try {
System.out.println("b4 Connection");
connection = getConnection();
System.out.println("After Connection");
stmt = connection.createStatement();
System.out.println("Create statement");
ResultSet rs=stmt.executeQuery(query);
if(rs!=null)
System.out.println("1> Hi rs:"+rs);
while(rs!= null && rs.next()){
System.out.println("hi...!!");
user=new User();
user.setSerial(rs.getInt(1));
System.out.println("Serial : "+rs.getInt(1));
user.setName(rs.getString(2));
user.setEmail(rs.getString(3));
user.setImei(rs.getString(4));
System.out.println("I'm here !");
user.setModel(rs.getString(5));
user.setManufacturer(rs.getString(6));
user.setOsversion(rs.getString(7));
user.setHdyk(rs.getString(8));
user.setDate(rs.getString(9));
user.setAppname(rs.getString(10));
list.add(user);
System.out.println("Last..");
}
rs.close();
rs = stmt.executeQuery("SELECT FOUND_ROWS()");
System.out.println("2> :" +rs);
if(rs.next()){
this.noOfRecords = rs.getInt(1);
System.out.println("3> :" +this.noOfRecords);
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
finally
{
try {
if(stmt != null)
stmt.close();
if(connection != null)
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

return list;

}

public int getNoOfRecords() {
return noOfRecords;
}
}

相应的输出是:

1
b4 Connection
After Connection
Create statement
1> Hi rs:com.mysql.jdbc.JDBC4ResultSet@35e6e3
2> :com.mysql.jdbc.JDBC4ResultSet@c9630a
3> :0

即使我也使用相同的代码来选择所有用户,并且在那个时间点我得到了正确的o/p。

花了这么多时间,但无法解决它 - 我哪里出错了......所以我们随时欢迎您的评论和评论。

最佳答案

那是因为您的查询没有为您获取任何行。因此 rs.next() 将会返回 false,因此执行不会进入 while 循环:

while(rs!= null && rs.next())

而且您不必检查 rs != null。它不会为空。 stmt.executeQuery 始终返回一个 ResultSet。只需在 while 中添加 rs.next() 即可:

while(rs.next())

是的,您应该使用 PreparedStatement用于执行查询而不是语句。这是 tutorial这将帮助您入门。

关于java - 结果集不会进入 while 循环并设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13621097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com