【发布时间】:2013-05-14 23:04:35
【问题描述】:
我有这个 sqlite 数据库,我可以运行查询“从条形码中选择 *,其中条形码 ='CFMS-ZUFH-WRVY-EXAA' 并获得单行返回。但在我的 Java 应用程序中,当我运行几乎相同时sql,它返回一个空结果集。变量last、email等是JTextFields,尽管问题在它们之前。if语句甚至不执行,如果我在它之前运行rs.next()并设置if(true)我收到一条错误消息,提示 ResultSet 已关闭。
try {
db.dbopen(config.getdbfolder(),config.getdbname());
// barcode-barcode.replaceAll("\\s","");
ResultSet rs=db.query("select * from barcode where barcode=?",barcode);
if (rs.next()) {
first.setText(rs.getString("first_name"));
System.out.println(rs.getString("first_name"));
last.setText(rs.getString("last_name"));
email.setText(rs.getString("email"));
phone.setText(rs.getString("phone"));
subject.setSelectedItem(rs.getString("subject"));
Boolean selected;
if (rs.getString("baronly").equals("false")) selected=false;
else selected=true;
barcodebox.setSelected(selected);
update=true;
}
db.conn.close();
} catch ( SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是方法查询。
public ResultSet query(String sql, String barcode) throws SQLException {
// TODO Auto-generated method stub
PreparedStatement prep =conn.prepareStatement(sql);
prep.setString(1, barcode);
ResultSet rs= prep.executeQuery();
prep.close();
return rs;
}
【问题讨论】:
-
if (rs.next()) {不应该是while (rs.next()) {吗? -
@Smit 不,不必如此。 rs.next() 只是检查是否返回了任何行
-
不,只有一个结果
-
@Codeguy007 光标最初指向第一行之前。所以执行 next() 会检查它是否返回了任何结果
-
@TemporaryNickName 不开玩笑。那不是我的问题。