gpt4 book ai didi

java - 无法弄清楚为什么 sqlite 查询没有返回正确的结果

转载 作者:行者123 更新时间:2023-12-02 07:01:51 27 4
gpt4 key购买 nike

我有这个sqlite数据库,我可以运行查询“select * from Barcode wherebarcode='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;
}

最佳答案

query 方法中,在返回 ResultSet 之前关闭 PreparedStatement。根据Javadocs for close :

Note:When a Statement object is closed, its current ResultSet object, if one exists, is also closed.

不要关闭查询中的PreparedStatement,请在使用ResultSet后关闭它。我将删除 query 方法并将其代码与其余代码内联,以便您仍然可以引用 PreparedStatement 在完成后关闭结果集

正如 @Reimeus 已经提到的,将 replaceAll 的结果分配回 barcode

关于java - 无法弄清楚为什么 sqlite 查询没有返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16554216/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com