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

Java 参数索引超出范围(1>;参数数,即0)。尝试将信息保存到数据库时的输出,java,jdbc,netbeans,xampp,Java,Jdbc,Netbeans,Xampp,我创建了一个小程序,用户必须将数据输入到文本字段中,并从组合框中选择选项。我使用XAMPP创建了一个数据库,并通过web浏览器为程序创建了相应的表 数据库名为activitydb,负责存储程序数据的表名为userdata 表中的第一列称为UserID,是一个int,每次添加新条目时自动递增。 其余的都是最大长度不同的varchar 这是当前程序的源代码: Connection con = null; Statement st = null; try { // activitydb = d

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

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

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

这是当前程序的源代码:

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()
将其中的数据存储为字符串

单击按钮将使程序不执行任何操作,但在控制台中打印:
参数索引超出范围(1>参数数量,为0)。
您缺少占位符
要输入值,您的查询应该是:

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

您缺少占位符
要输入值,您的查询应该是:

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

sql语句不包含值的任何占位符(
)。sql语句不包含值的任何占位符(
)。单击按钮后,控制台中似乎不再显示该错误,但不会对数据库进行任何更改。我已经重新启动了MySQL服务器、XAMPP客户端和NetBeans IDE 8.2。您还有一个问题,即您没有执行语句,因此在设置参数的最后,您必须调用
prdStmt.executeUpdate()添加
prdStmt.executeUpdate()成功了,程序现在记录到数据库中。感谢您的帮助,如果问题太简单,我深表歉意,因为我是Java初学者,最近才处理过数据库。单击按钮后,控制台中似乎不再出现错误,但是,没有对数据库进行任何更改。我已经重新启动了MySQL服务器、XAMPP客户端和NetBeans IDE 8.2。您还有一个问题,即您没有执行语句,因此在设置参数的最后,您必须调用
prdStmt.executeUpdate()添加
prdStmt.executeUpdate()成功了,程序现在记录到数据库中。感谢您的帮助,如果问题太简单,我很抱歉,因为我是Java初学者,最近才处理数据库。