观察这段代码的一个奇怪的行为,因为resultset没有给出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。
花了这么多时间,却无法解决它 - 我出错的地方......所以你的评论&amp;欢迎发表评论。
答案 0 :(得分:3)
那是因为你的query
没有抓到任何一行。因此rs.next()
将返回false
,因此执行不会进入while loop
:
while(rs!= null && rs.next())
您无需检查rs != null
。它不会为空。 stmt.executeQuery
始终返回ResultSet
。只需在rs.next()
中添加while
:
while(rs.next())
是的,您应该使用PreparedStatement
来执行query
而不是Statement
。这是一个tutorial,可以帮助您入门。