Индекс параметра вне диапазона (1> количество параметров, которое равно 0). вывод при попытке сохранить информацию в базу данных - PullRequest
1 голос
/ 28 января 2020

Я создал небольшую программу, в которой пользователь должен вводить данные в текстовые поля и выбирать параметры в комбинированных полях. Я создал базу данных с помощью 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).

1 Ответ

3 голосов
/ 28 января 2020

Вам не хватает заполнителей ? для ввода значений, ваш запрос должен быть:

String sqlconn = "INSERT INTO userdata (UserID, LastName, FirstName, MiddleName," +
        " Email, Sex, HomeAddress, City, CPUBrand, ComputerType, HardwareSpecs," +
        " GPUBrand, GPUType, GPUVRAM) " +
        "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...