为什么返回的ResultSet为null

时间:2016-06-11 11:47:32

标签: java mysql jdbc

鉴于此表结构:

enter image description here

我想从数据库中获取用户的基本信息,所以 我创建了一个名为ResulSet的{​​{1}}(请参阅下面的代码)。 当我迭代rst时,它总是返回rst

null

现在如果我在收到回复之后迭代public ResultSet Detail(String mobile) throws Exception { dbConnect(); // make connection String sql = "select * from profile where mobile = ?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, mobile); ResultSet rst = pstmt.executeQuery(); dbClose(); // connection closed return rst; } ,我会得到rst值。

null

输出:

try {
    ResultSet rst = new DB().Detail(mobile);
    String fname = rst.getString("firstname");
    String lname = rst.getString("lasttname");
    String date = rst.getString("dateofbirth");
    System.out.println("First name : " + fname + "\nLast Name : " + lname + "\nDate of Birth : " + date);
} catch (Exception exc) {
    exc.printStackTrace();
}

2 个答案:

答案 0 :(得分:1)

根据ResultSet的官方文档,您需要在之前调用next()方法,您可以从ResultSet访问数据元素:

  

ResultSet游标最初位于第一行之前;对方法的第一次调用使得第一行成为当前行;第二个调用使第二行成为当前行,依此类推。

您发布的代码片段中缺少此内容。因此,您的代码片段没有。 2应写成如下:

try {
     ResultSet rst = new DB().Detail(mobile);
     if(rst.next()) {
         String fname = rst.getString("firstname");
         String lname = rst.getString("lasttname");
         String date = rst.getString("dateofbirth");
         System.out.println("First name : " + fname + "\nLast Name : " + lname + "\nDate of Birth : " + date);
     } else {
         System.out.println("No data for the given parameter '" + mobile + "'");
     } 
} catch (Exception exc) {
     exc.printStackTrace();
}

正如Jalal Kiswani的评论/回答中所述,建议您在处理ResultSet之前不要关闭数据库连接。

希望它有所帮助。

答案 1 :(得分:1)

关闭数据库连接将导致关闭所有相关对象(结果集和预准备语句)。所以在echo 'no-tty' >> ~/.gnupg/gpg.conf 之后rs无效 您应该在关闭连接之前阅读结果集。