Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sql数据库参数索引超出范围_Java_Mysql_Sql_Jdbc - Fatal编程技术网

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  (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);