来自jdbc的Mysql语法异常

时间:2009-10-24 22:11:56

标签: java mysql jdbc

我正在尝试根据以“@localhost”结尾的名称将数据从一个表移动到另一个表,但在移动数据时我得到一个异常: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“@localhost”附近使用正确的语法

我用来连接MySQL的JDBC代码是:

/

/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 个答案:

答案 0 :(得分:3)

您需要引用字符串文字:

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

您还需要转义字符串s以防止SQL注入攻击(或者最好是you should use prepared statements)。