Я пытаюсь использовать переменную в запросе выбора с предложением как, но получаю ошибку, как недопустимый идентификатор - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь использовать переменную в запросе выбора с предложением like, но получаю ошибку вроде неверного идентификатора. Вот мой метод ...

private void searchBooks(){

   try{
      String SEARCHFORTHIS=Find_Book_Field.getText();
      pst=conn.prepareStatement("SELECT * FROM BOOK WHERE NAME LIKE  '%'+ SEARCHFORTHIS +'%'");
      rs=pst.executeQuery();
      Show_All_Books.setModel(DbUtils.resultSetToTableModel(rs));
      }catch(SQLException e){
      e.printStackTrace();
      JOptionPane.showMessageDialog(null,e);
      }
    }

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

НИКОГДА не используйте конкатенацию строк для построения оператора SQL с предоставленными пользователем текстовыми значениями.

Ну, если вы действительно не хотите, чтобы ваш код был восприимчив к SQL-инъекциям атак, позволяя хакеру украсть ваши данные и удалить ваши таблицы.

Вы уже используете PreparedStatement, поэтому используйте его правильно.

Вы также должны использовать try-with-resources для правильного управления ресурсами.

private void searchBooks() {
    String SEARCHFORTHIS = Find_Book_Field.getText();
    String sql = "SELECT * FROM BOOK WHERE NAME LIKE ?";
    try (PreparedStatement stmt = conn.prepareStatement(sql)) {
        stmt.setString(1, "%" + SEARCHFORTHIS + "%");
        try (ResultSet rs = stmt.executeQuery()) {
            Show_All_Books.setModel(DbUtils.resultSetToTableModel(rs));
        }
    } catch (SQLException e){
        e.printStackTrace();
        JOptionPane.showMessageDialog(null,e);
    }
}
0 голосов
/ 01 мая 2018

Попробуйте это

try{
  String SEARCHFORTHIS=Find_Book_Field.getText();
  pst=conn.prepareStatement("SELECT * FROM BOOK WHERE NAME LIKE  '%"+ SEARCHFORTHIS +"%'");
  rs=pst.executeQuery();
  Show_All_Books.setModel(DbUtils.resultSetToTableModel(rs));
  }catch(SQLException e){
  e.printStackTrace();
  JOptionPane.showMessageDialog(null,e);
  }
}

Внесены изменения только в запрос SELECT. вы не правильно закрыли двойную кавычку.

Примечание : Полностью согласен с Андреасом, мы должны использовать Preparedstatment, в таких сценариях, чтобы предотвратить атаки SQL-инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...