0

このコードの奇妙な振る舞いを観察すると、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を取得しています。

それのために非常に多くの時間を費やしていますが、それを解決することはできません-私が間違っているところ....だからあなたのレビューとコメントはいつでも歓迎されます。

4

1 に答える 1

4

これqueryは、行を取得しなかったためです。したがって、rs.next()が返されるfalseため、実行はwhile loop:になりません。

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

そして、あなたはをチェックする必要はありませんrs != null。nullにはなりません。はstmt.executeQuery常にを返しますResultSet。ちょうどrs.next()あなたの中に持っているwhile

while(rs.next())

そして、はい、あなたはではなくPreparedStatementあなたの実行に使用する必要があります。これがあなたが始めるのを助けるチュートリアルです。queryStatement

于 2012-11-29T07:51:32.270 に答える