2017-05-01 61 views
0
Class.forName("com.mysql.jdbc.Driver"); 
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/facts", "root", ""); 
int x = s.size(); 
for(int i=0; i<x; i++) 
{ 
    String sql = "INSERT INTO facts.facts (Sno, Description) VALUES ("+ i +","+ s.get(i) + ")"; 
    Statement stmt = con.createStatement(); 
    stmt.executeUpdate(sql); 
} 

我收到此错误:您的SQL语法错误;请查看与您的MySQL服务器版本相对应的手册,以便在'成年人的1/3以上使用正确的语法',美国有超过1,250万的儿童和青少年肥胖。JDBC MySQL错误

ArrayList的第一个字符串是“超过三分之一的成年人,美国有超过一千二百万的儿童和青少年是肥胖的,过去30年来,儿童和青少年的肥胖几乎增加了三倍“。

回答

1

错误的直接原因可能是您尝试插入的字符串没有正确引用。您可以尝试以下方法来解决这个问题:

"'" + s.get(i) + "'" 

但是,你应该使用预准备语句在这里:使用预处理语句的

for (int i=0; i < x; i++) { 
    String selectSQL = "INSERT INTO facts.facts (Sno, Description) VALUES (?, ?)"; 
    PreparedStatement ps = con.prepareStatement(sql); 
    ps.setInt(1, i); 
    ps.setString(2, s.get(i)); 
    ps.executeUpdate(); 
} 

好处包括:

  • 串为您自动处理报价/转义
  • 防止SQL注入
  • 查询更容易阅读和维护,如SQL语言显然是从您的Java应用程序代码划分
+0

**仍然显示错误:**您的SQL语法错误;请检查第1行 – whinytween96

+0

附近'?,?)'使用的正确语法对应的MySQL服务器版本的手册奇怪...它应该正常工作。你可以尝试在MySQL上运行原始的'INSERT'查询吗? –

+0

@TimBiegeleisen:在调用ps.executeUpdate()'时不要使用参数'sql'。 –