Mysql синтаксис исключение из JDBC - PullRequest
0 голосов
/ 25 октября 2009

Я пытаюсь переместить данные из одной таблицы в другую на основе имен, заканчивающихся на "@localhost", но при перемещении данных я получаю исключение: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с @localhost в строке 1

Код JDBC, который я использовал для соединения с MySQL:

/

/package foo;
import javax.sql.*;
import java.sql.*;

public class TablesUpdate
{

public static String MoveMessage(String s)
{
int count=0;
try{
String query="insert into deadletter(message_name,repository_name,message_state,error_message,sender,recipients,remote_host,remote_addr,message_body,message_attributes,last_updated) select message_name,repository_name,message_state,error_message,sender,recipients,remote_host,remote_addr,message_body,message_attributes,last_updated from inbox where sender="+s+"@localhost;";
Connection con=databaseConnection();
Statement stmt=con.createStatement();

 count=stmt.executeUpdate(query);
}
 catch(Exception e)
{
e.printStackTrace();
}
if(count>0)
return "Data has been moved";
else
return "There is no data";


}

public static void main(String[] args)
{
TablesUpdate.MoveMessage(args[0]);
}


public static Connection databaseConnection() throws Exception
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
      return DriverManager.getConnection("jdbc:mysql://localhost:3306/mail","root","");
}
}     

Я пробовал значение переменной запроса из приведенного выше кода в MySQL, и оно работало правильно. Но почему не здесь? Драйвер MySQL, который я использую: mysql-connector-java-5.1.5-bin.jar.

1 Ответ

3 голосов
/ 25 октября 2009

Вам нужно заключить строковый литерал в строку:

where sender='"+s+"@localhost';

Вам также нужно экранировать строку s, чтобы предотвратить атаки SQL-инъекций (или, предпочтительно, , вам следует использовать подготовленные операторы ).

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