参数索引超出范围(1 > 参数个数,即 0)。尝试将信息保存到数据库时的输出

Posted

技术标签:

【中文标题】参数索引超出范围(1 > 参数个数,即 0)。尝试将信息保存到数据库时的输出【英文标题】:Parameter index out of range (1 > number of parameters, which is 0). output when attempting to save information to database 【发布时间】:2020-05-14 01:50:15 【问题描述】:

我创建了一个小程序,用户必须在其中将数据输入文本字段并从组合框中选择选项。我使用 XAMPP 创建了一个数据库,并通过网络浏览器为程序创建了相应的表。

数据库称为activitydb,负责存储程序数据的表称为userdata

表中的第一列称为 UserID,它是一个 int,每次添加新条目时都会自动递增。 其余的都是具有不同最大长度的 varchars。

这是目前程序的源代码:

Connection con = null;
Statement st = null;
try 
    // activitydb = database name
    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/activitydb?zeroDateTimeBehavior=convertToNull", "root", "");
    st = con.createStatement();
    // userdata = table name
    String sqlconn = "INSERT INTO userdata (UserID, LastName, FirstName, MiddleName, Email, Sex, HomeAddress, City, CPUBrand, ComputerType, HardwareSpecs, GPUBrand, GPUType, GPUVRAM)";
    PreparedStatement prdStmt = con.prepareStatement(sqlconn);
    // Input of variable data into corresponding database table
    // First table will be declared as null as it is an Integer designed with an Auto Increment
    prdStmt.setString(1, null);
    prdStmt.setString(2, jTextLastName.getText());
    prdStmt.setString(3, jTextFirstName.getText());
    prdStmt.setString(4, jTextMiddleName.getText());
    prdStmt.setString(5, jTextEmail.getText());
    prdStmt.setString(6, jComboBoxSex.getSelectedItem().toString());
    prdStmt.setString(7, jTextHomeAddress.getText());
    prdStmt.setString(8, jTextCity.getText());
    prdStmt.setString(9, jComboBoxCPUBrand.getSelectedItem().toString());
    prdStmt.setString(10, jComboBoxComputerType.getSelectedItem().toString());
    prdStmt.setString(11, jComboBoxHardwareSpecs.getSelectedItem().toString());
    prdStmt.setString(12, jComboBoxGPUBrand.getSelectedItem().toString());
    prdStmt.setString(13, jComboBoxGPUType.getSelectedItem().toString());
    prdStmt.setString(14, jComboBoxGPUVRAM.getSelectedItem().toString());
    // Do this if something goes wrong
 catch (SQLException err) 
    // Print error message to console for diagnosis
    System.out.println(err.getMessage());

对于组合框,我使用getSelectedItem().toString() 将在其中找到的数据存储为字符串。

单击按钮将使程序什么也不做,只是在控制台中打印: Parameter index out of range (1 > number of parameters, which is 0).

【问题讨论】:

您的 sql 语句不包含值的任何占位符 (?)。 【参考方案1】:

您缺少占位符 ? 来放置值,您的查询应该是:

String sqlconn = "INSERT INTO userdata (UserID, LastName, FirstName, MiddleName," +
        " Email, Sex, HomeAddress, City, CPUBrand, ComputerType, HardwareSpecs," +
        " GPUBrand, GPUType, GPUVRAM) " +
        "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

【讨论】:

点击按钮后,控制台中似乎不再出现错误,但是数据库没有任何更改。我已经重启了 MySQL 服务器、XAMPP 客户端和 NetBeans IDE 8.2。 @Rattle189 你还有一个问题,就是你没有执行你的语句,所以在你设置参数的最后,你必须调用prdStmt.executeUpdate(); 添加prdStmt.executeUpdate(); 成功了,程序现在记录到数据库中。感谢您的帮助,如果问题太简单,我深表歉意,因为我是 Java 初学者并且最近才处理数据库。

以上是关于参数索引超出范围(1 > 参数个数,即 0)。尝试将信息保存到数据库时的输出的主要内容,如果未能解决你的问题,请参考以下文章

参数索引超出范围(4 > 参数个数,即 3)

java.sql.SQLException:参数索引超出范围(4 > 参数个数,即 3)

java.sql.SQLException:spring boot中的参数索引超出范围(6>参数个数,即5)

为啥此代码显示参数索引超出范围异常? [复制]

FLUTTER:RangeError(索引):索引超出范围:没有有效索引:0(通过参数)

错误“索引超出范围。必须为非负数且小于集合的大小。参数名称:索引”