2011-09-01 186 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

謝謝...........! –