我收到以下例外情况我尝试在值之间放置引号和逗号仍然无法解决

时间:2017-12-11 14:47:50

标签: java mysql jdbc

  

您的SQL语法有错误;检查对应的手册   到您的MariaDB服务器版本,以便在'1,2,3,4附近使用正确的语法   第1行的值('2017-01-11','P','P','P','A')

错误可能在insertColumninsertValue变量中。我无法正确使用语法。可能我可能会遗漏变量中的一些引号,但我不知道在哪里。我在网上提到了不同的来源,但尝试失败了。 columnNames是包含所有列的列表。

 String insertColumns = ""; 
 String insertValues = "";

 if(columnNames != null && columnNames.size() > 0){
    insertColumns +=  columnNames.get(0);
    insertValues += "?";
 }


 for(int i = 1; i < columnNames.size();i++){
  insertColumns += "," + columnNames.get(i) ;
  insertValues += ","+"?";
 }
 System.out.println(insertColumns);
 String insertSql; 
 //Here is where the problem lies
 insertSql = "INSERT INTO os ("+ insertColumns+") values (" + insertValues + 
 ")";
 System.out.println(insertSql);        
 try{
 PreparedStatement ps = conn.prepareStatement(insertSql);
 ps.setDate(1, sqlStartDate);
 for(int i=1;i<=no_of_stud;i++){
    int j=i+1;
    int k=i-1;
    ps.setString(j, present[k]);
 }

1 个答案:

答案 0 :(得分:0)

根据:https://mariadb.com/kb/en/library/identifier-names/

  

标识符名称可以以数字开头,但除非引用,否则不能包含数字。

所以代替:insertColumns += columnNames.get(i);你应该:

这很有用。

  

insertColumns + =&#34;`&#34; + columnNames.get(i)+&#34;`&#34; ;

也是第一个if应该测试别的东西。例如:

if(columnNames == null || columnNames.size() <= 0){
  return;
}