2014-01-22 59 views
-1

你好我試圖插入到數據庫中,我得到的錯誤:Java的SQL數據庫參數索引超出範圍

SQL Exception: java.sql.SQLException: Parameter index out of range (6 > number of parameters, which is 5). 

的代碼導致這就是:

PreparedStatement st = connection.prepareStatement("INSERT INTO Members VALUES ('?','?','?','?','?','?','?','?','?','?','?','?','?','?'','?','?','?','?','?'"); 
     st.setString(1, username); 
     st.setString(2, id); 
     st.setString(3, firstName); 
     st.setString(4, lastName); 
     st.setString(5, address); 
     st.setString(6, phone); 
     st.setString(7, email); 
     st.setInt(8, age); 
     st.setString(9, String.valueOf(sex)); 
     st.setDouble(10, height); 
     st.setInt(11, kgs); 
     st.setDouble(12, stone); 
     st.setInt(13, targetWeightKgs); 
     st.setDouble(14, bmi); 
     st.setString(15, medicalHistory); 
     st.setString(16, extraHistory); 
     st.setBoolean(17, smoker); 
     st.setBoolean(18, usernameCompleted); 
     st.setString(19, myNotes); 
     st.executeUpdate(); 
+0

您可以顯示數據庫中的表? – ashokramcse

回答

1

你不應該引用您的?佔位符,即使它們表示字符串數據。引用的問號將被解釋爲文字'?'字符串。它可能解釋爲5個參數,因爲你的第6到最後一個參數有兩個'字符,所以你最後的5個? s的解釋爲單引號之外。

嘗試

connection.prepareStatement("INSERT INTO Members VALUES 
    (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); 

UPDATE

有關閉 「)」 失蹤的INSERT語句,我現在又增加了。

+0

使用prepareStatement非常好,但是肯定必須有更好的方法來創建更復雜的prepareStatement,比如這個。我的意思是使用15x'?'是不可行的... –

+0

@ i-bob您的評論沒有多大意義。爲什麼要創建比這更復雜的'PreparedStatement'?問題中沒有任何事情表明任何更復雜的東西都是必需的,或者這需要執行15次,儘管'PreparedStatement'仍然是無論如何要走的路。 – rgettman

+0

我的意思是,當然這是一個有效的問題的答案,我只是問如何做到這一點或許在一些更好的方式,如果有人知道怎麼那麼他就可以與我們分享......我的意思是使用像的DAO等。 –

0

你不需要'周邊?的。

PreparedStatement st = connection.prepareStatement("INSERT INTO Members VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?"); 

BUT這裏真正的問題是你雙單引號的?的一個樣子:'?'',

0

有在行

preparedStatement在你的示例代碼一個錯誤,如果你已經完成了你原來的代碼中有相同的錯誤,那麼它將無法工作!

退房的問號和'你不需要'

0

替換「?」通過?

INSERT INTO Members VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);