Передача строки в предложении where с использованием PreparedStatement - PullRequest
0 голосов
/ 07 мая 2019

Как мне использовать PreparedStatement для передачи строки в предложении where?

Я пробовал следующие строки кода:

String sql = "select pass from lbdb_user WHERE username = ? collate latin1_bin";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,"\""+username+"\"" );

Выдает следующий mysqlисключение:

You have an error in your SQL syntax;

Ответы [ 3 ]

3 голосов
/ 07 мая 2019

Попробуй так:

String username = "Mickey Mouse";
String sql = "select pass from lbdb_user WHERE username = ? ";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, username);

Я не знаю, что это за штуковина. Я бы порекомендовал использовать Unicode и UTF-8 в вашей базе данных.

0 голосов
/ 07 мая 2019

Вот пример, использующий COLLATE latin1_bin, как то, что вы опубликовали, и оно работает

String lSql = "SELECT lastname FROM contacts WHERE lastname= ? COLLATE latin1_bin ";
PreparedStatement lPreparedStatement = con.prepareStatement(lSql);
lPreparedStatement.setString(1, "andre");
ResultSet lResultSet = lPreparedStatement.executeQuery();
0 голосов
/ 07 мая 2019

Используете ли вы Microsoft Transact-SQL? Я просто не могу это проверить, но попробую использовать collate после "order by" и с asc-окончанием. Поскольку сортировка определяет специальные порядки сортировки, вы не можете сортировать, если не сортируете.

Во-вторых, я не думаю, что существуют имена пользователей с кавычками внутри. Вы только окружаете их внутри своего SQL, но не если вызываете метод "setString" подготовленного оператора.

Исправленный код:

String sql = "select pass from lbdb_user WHERE username = ? order by pass collate latin1_bin asc";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, username); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...