У меня есть DDBB со столом users
, и я пытаюсь получить поля user_id
и user_pass
, ища user_name
. Так что, когда я запускаю следующий запрос:Java PreparedStatement Wilcard не работает
SELECT `user_id`, `user_pass` FROM `users` WHERE `user_name` LIKE '%aName%';
возвращает, т.е. aName = «Джон»:
+---------+-----------+
| user_id | user_pass |
+---------+-----------+
| 5 | "1234" |
+---------+-----------+
Хорошо, тогда я хочу, чтобы выполнить это с помощью PreparedStatement, по этой причине я сделали эту функцию:
private final String QUERY_GETUSERNAME2 =
"SELECT `user_id`, `user_fname`"
+ " FROM `users`"
+ " WHERE `user_fname` LIKE ?;";
private String[][] getUsersInv(String usrName){
ArrayList<String[]> alAux = new ArrayList();
String[][] ret = null;
try{
PreparedStatement st = _conn.prepareStatement(QUERY_GETUSERNAME2);
st.setString(1, "'%"+usrName+"%'");
ResultSet rs = st.executeQuery();
while(rs.next()){
String[] asAux = {String.valueOf(rs.getInt(1)), rs.getString(2)};
alAux.add(asAux);
}//while
}catch(SQLException e){
e.printStackTrace(System.out);
}finally{
if (!alAux.isEmpty()){
ret = new String[alAux.size()][alAux.get(0).length];
for (int i = 0; i < alAux.size(); i++)
ret[i] = alAux.get(i);
}//fi
}
return ret;
}
Как вы можете видеть, функция возвращает строку [] [], поэтому я проверяю в предыдущей функции, если возврат является или не нуль:
public void insertUsersInvTableModel(JTable table, String user){
DefaultTableModel model = (DefaultTableModel) table.getModel();
String[][] row = getUsersInv(user);
if (row != null)
model.addRow(row);
}
И эта функция вызова от слушателя для JButton:
private void addUserActionPerformed(java.awt.event.ActionEvent evt) {
if (comboUsers.getSelectedIndex() != 0){
new Users(_conn).insertUsersInvTableModel(_target, String.valueOf(comboUsers.getSelectedItem()));
_target.validate();
_target.repaint();
setVisible(false);
}
}
Как вы можете себе представить, что есть JDialog с JComboBox со всеми пользователями перечисленных вниз. Как таблица users
является AUTO_INCREMENT, у user_id
есть некоторые пробелы (или, может быть, она и будет), и единственный способ построить JComboBox был не связан user_id
с индексом JComboBox.
Но, проблема в том, что всякий раз, когда я выбираю элемент из JComboBox, и я запустить процесс, чтобы получить user_id
и user_pass
на основе выбранного элемента (ни индекса), то ResultSet всегда NULL.
Любая идея? Спасибо.
Вы можете публиковать сгенерированный запрос? – Stephan
@Stephan iirc это невозможно, потому что подготовленный оператор отправляется в db вместе с параметрами. нет строки запроса, сгенерированной на стороне java –
@MarcoForberg thx для очистки этого, я не использовал подготовленные заявления до – Stephan