У вас есть ошибка в вашем синтаксисе SQL; ... возле '[C @ f8d6792' 'в строке 1 - PullRequest
0 голосов
/ 30 апреля 2018

Я не могу понять мою синтаксическую ошибку с MySQL.

Я запускаю экран входа в программу Java в eclipse и получаю это сообщение об ошибке:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашему MySQL версия сервера для правильного синтаксиса для использования рядом с '[C @ f8d6792' 'в строке 1

7 символов после C@ меняются каждый раз, когда я запускаю программу, и выдается исключение. Я попытался взглянуть на руководство, но через некоторое время разочаровался.

Вот мой код для раздела, генерирующего исключение:

Connection conn = null;
String dbName = "test";
String serverip = "localhost";
String serverport = "3306";
String url = "jdbc:mysql://" + serverip + ":" + serverport + "/" + dbName;
String driver = "com.mysql.jdbc.Driver";
String databaseUserName = "root";
String databasePassword = "Pitbu!1s";
Statement stmt = null;
ResultSet rs = null;
String sql = "select * from users where user_name = '" + textField_UserName.getText() + " AND password = '" + passwordField_Password.getPassword().toString() + "'";

try {
  Class.forName(driver);
  conn = DriverManager.getConnection(url, databaseUserName, databasePassword);
  stmt = conn.createStatement();
  rs = stmt.executeQuery(sql);

  if (rs.next())

    lblUserName_Label.setText(textField_UserName.getText());
  lblUserNameOver_Label.setText(textField_UserName.getText() + "'s");
  textField_UserName.setText("");
  passwordField_Password.setText("");
  panel_Main.setVisible(true);
  panel_LogIn.setVisible(false);

  conn.close();
} catch (Exception i) {
  System.out.print(i);
}

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вероятно, проблема здесь:

String sql = "select * from users where user_name = '" + textField_UserName.getText() + " AND password = '" + passwordField_Password.getPassword().toString() + "'";
                                                                                         ^

Вы не закрываете кавычки для имени пользователя, и, скорее всего, этот запрос построен:

select * from users where user_name = 'tom AND password='pw';
                                          ^

Чтобы сделать это, вы можете просто добавить отсутствующую цитату и все.

Лучшим способом было бы не объединять строки и использовать параметры для построения вашего запроса. Это будет более безопасно и проще в обслуживании.

0 голосов
/ 30 апреля 2018

Вы пропускаете апостроф в своем выражении SQL

String sql = "select * from users where user_name = '" + textField_UserName.getText() + "' AND password = '" + passwordField_Password.getPassword().toString() + "'";
...