Database.getConnection()错误 - >参数索引超出范围(1>参数个数,为0)

时间:2014-12-26 17:28:48

标签: mysql jdbc insert

我开发了一个应用程序,它显示了id,subject,indexno和其他信息。每个字段都有单独的文本框,每当用户填写表单并点击提交按钮时,必须将值插入到我的数据库中。如果我尝试将其提交到数据库,则不会发生任何事情。请查看以下代码。

        try {
            Connection con = null;
            PreparedStatement pst = null;
            String id = "", subject = "", indexNo = "", additional = "";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            int updateQuery = 0;
            if (id == null && subject == null && indexNo == null && additional == null) {
                if (id == "" && subject == " " && indexNo == "" && additional == "") {

                    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "KUMAR");

                    String query="insert into circularindex(id,subject,indexNo,additional)values(?,?,?,?)";
                    pst = con.prepareStatement(query);

                    pst.setString(1, id);
                    pst.setString(1, subject);
                    pst.setString(2, indexNo);
                    pst.setString(3, additional);
                    pst.executeUpdate();
                }
            }
        } catch (Exception ex) {
            System.out.println("Database.getConnection() Error -->" + ex.getMessage());
        }

请帮我解决上述编码错误并做好必要的工作。

3 个答案:

答案 0 :(得分:0)

设置参数时似乎有拼写错误:

pst.setString(1, id);
pst.setString(1, subject);
pst.setString(2, indexNo);
pst.setString(3, additional);

您通过覆盖另一个来设置第一个参数两次。你应该像

那样做
pst.setString(1, id);
pst.setString(2, subject);
pst.setString(3, indexNo);
pst.setString(4, additional);

答案 1 :(得分:0)

阿尔玛斯已经指出了一个错字。如果它仍然存在,请尝试在没有主键的情况下添加它(以防它是否是自动PK):

String query="insert into circularindex(id,subject,indexNo,additional) values (?,?,?)";
pst = con.prepareStatement(query);

pst.setString(1, subject);
pst.setString(2, indexNo);
pst.setString(3, additional);

pst.executeUpdate();

答案 2 :(得分:0)

你有一些冲突的if语句。第一个测试所有输入都为null,然后嵌套if测试它们是否为空。他们不能两者兼得。

我删除了两个if语句并对setString参数的某些值进行了硬编码。代码有效。

您希望将空字符串或空字符串插入数据库似乎不合逻辑。我想你想确定它们 null和 NOT 为空。

更改if语句,使它们测试非null而不是空,向所有四个字符串添加一些值,您应该能够访问数据库。