鉴于此表结构:
我想从数据库中获取用户的基本信息,所以
我创建了一个名为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();
}
答案 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无效
您应该在关闭连接之前阅读结果集。