私はクエリを実行できるこの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;
}