У меня есть эта база данных sqlite, в которой я могу запустить запрос «выберите * со штрих-кода, где штрих-код =« CFMS-ZUFH-WRVY-EXAA », и получить один row return. Однако в моем приложении Java, когда я запускаю почти такой же sql, он возвращает пустой набор результатов. Переменные last, email и т. д. - это JTextFields, хотя проблема перед ними. Оператор if даже не выполняется, и если Я бегу rs.next() перед ним и установить, если (истина), я получаю ошибку говоря ResultSet закрыт.Не могу понять, почему sqlite-запрос не возвращает правильный результат.
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() просто проверяет, была ли возвращена какая-либо строка. – Jason
Нет только один результат. – Codeguy007