Java的SQL数据库参数索引超出范围
你好我试图插入到数据库中,我得到的错误: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();
你不应该引用您的?
占位符,即使它们表示字符串数据。引用的问号将被解释为文字'?'
字符串。它可能解释为5个参数,因为你的第6到最后一个参数有两个'
字符,所以你最后的5个?
s的解释为单引号之外。
尝试
connection.prepareStatement("INSERT INTO Members VALUES
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
UPDATE
有关闭 “)” 失踪的INSERT语句,我现在又增加了。
使用prepareStatement非常好,但是肯定必须有更好的方法来创建更复杂的prepareStatement,比如这个。我的意思是使用15x'?'是不可行的... –
@ i-bob您的评论没有多大意义。为什么要创建比这更复杂的'PreparedStatement'?问题中没有任何事情表明任何更复杂的东西都是必需的,或者这需要执行15次,尽管'PreparedStatement'仍然是无论如何要走的路。 – rgettman
我的意思是,当然这是一个有效的问题的答案,我只是问如何做到这一点或许在一些更好的方式,如果有人知道怎么那么他就可以与我们分享......我的意思是使用像的DAO等。 –
你不需要'
周边?
的。
PreparedStatement st = connection.prepareStatement("INSERT INTO Members VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?");
BUT
这里真正的问题是你双单引号的?
的一个样子:'?'',
有在行
preparedStatement
在你的示例代码一个错误,如果你已经完成了你原来的代码中有相同的错误,那么它将无法工作!
退房的问号和'
你不需要'
替换“?”通过?
INSERT INTO Members VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);
您可以显示数据库中的表? – ashokramcse