Java Sql数据库参数索引超出范围
您好,我正在尝试插入数据库,但出现错误:Java Sql数据库参数索引超出范围,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,您好,我正在尝试插入数据库,但出现错误: 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 ('?','?','?','?','?','?'
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个?
被解释为在单引号之外
试一试
更新
我现在添加的insert语句中缺少一个结束“)”。您不需要围绕
?
的
PreparedStatement st = connection.prepareStatement("INSERT INTO Members VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?");
但是
这里真正的问题是您将?
中的一个双单引号引为:?”,
第行的示例代码中有一个错误
preparedStatement
如果您在原始代码中犯了相同的错误,那么它将不起作用
检查问号,然后“
您不需要”
将“?”替换为
INSERT INTO Members VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);
您能显示数据库表吗?使用prepareStatement很好,但肯定有更好的方法来创建更复杂的prepareStatement,比如下面这个。我的意思是使用15x“?”是不可行的…@I-bob你的评论没有多大意义。为什么要创建比这个更复杂的PreparedStatement
?问题中没有任何东西表明需要更复杂的东西,或者需要执行15次,尽管PreparedStatement
无论如何都是可行的。我的意思是,这肯定是对问题的有效回答,我只是问如何做,也许以更好的方式,如果有人知道如何,然后他可以与我们分享它。。。我的意思是使用DAO等东西。@I-bob如果你对你的代码有一个特定的问题,并且有一个更好的方法将DAO与PreparedStatement
一起使用,那么你可以把它当作另一个问题来问。这绝不是对你的解决方案的批评,只是对其他选项的简单好奇…:)
INSERT INTO Members VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);