2011-09-01 187 views
0

我有连接到MySQL和回收数据的java代码。我有以下代码,它总是给SQLSyntaxErrorException,并说在第1行有语法错误。我不明白为什么。请帮帮我。我可以确定这些名字是正确的。SQL语法错误


private void saveDetails(int slct) throws SQLException { 

     if(slct == ADD_NEW_RECORD) { 
      String query = "INSERT INTO emp(?,?,?,?,?,?,?,?,?,?,?,?,?,?) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 
      PreparedStatement st = Main.db.con.prepareStatement(query); 
      st.setString(1, "epfno"); 
      st.setString(2, "fname"); 
      st.setString(3, "lname"); 
      st.setString(4, "sex"); 
      st.setString(5, "nid"); 
      st.setString(6, "address"); 
      st.setString(7, "birthday"); 
      st.setString(8, "position"); 
      st.setString(9, "tpno"); 
      st.setString(10, "fathername"); 
      st.setString(11, "mothername"); 
      st.setString(12, "m_status"); 
      st.setString(13, "comments"); 
      st.setString(14, "photo_id"); 
      st.setInt(15, emp.epfno); 
      st.setString(16, emp.fname); 
      st.setString(17, emp.lname); 
      st.setInt(18, emp.sex); 
      st.setString(19, String.copyValueOf(emp.nid)); 
      st.setString(20, emp.address); 
      st.setDate(21, emp.birthday); 
      st.setString(22, emp.position); 
      st.setString(23, emp.tpno); 
      st.setString(24, emp.fathername); 
      st.setString(25, emp.mothername); 
      st.setBoolean(26, emp.m_status); 
      st.setString(27, emp.comments); 
      st.setString(28, emp.photo_id); 

      st.execute(); 
     } 
    } 
+0

请添加错误堆栈跟踪或日志输出 –

回答

7

你试图设置字段名作为参数 - 你不能做到这一点。您只能指定作为参数。所以基本上你的第一个14次setString调用应该走了,你应该把这些字段名称的SQL:

String query = "INSERT INTO emp(epfno, fname, lname, sex, nid, address, " 
      + "birthday, position, tpno, fathername, mothername, m_status, " 
      + "comments, photo_id) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 

st.setInt(1, emp.epfno); 
st.setString(2, emp.fname); 
st.setString(3, emp.lname); 
// etc 
+0

谢谢...........! –

3

你不能参数列的名称,所以你的SQL需要看起来像这样:
INSERT INTO emp(epfno, fname, ...) VALUES (?, ?, ...)

+0

谢谢...........! –

3

您不能指定列名作为参数。尝试拼写出来在您的查询:

INSERT INTO emp(epfno, fname, lname,... 

和摆脱st.setXXX调用的上半年。

+0

谢谢...........! –

3

你不能传递列名作为?参数。您需要为查询中的列命名并仅传递参数中的值

+0

谢谢...........! –