SQLException: значение не указано для параметра 9 - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь создать приложение, которое позволяет пользователям создавать профиль, однако при вставке в БД появляется ошибка, показанная выше.Я посмотрел на похожие решения, но, похоже, ничего не помогло.

Соответствующий код в таком виде:

//Invokes myConnection class to link to DB
    Connection con = myConnection.getConnection();
    PreparedStatement ps;

    try 
    {
        //Adds the selected text to DB
        ps = con.prepareStatement("INSERT INTO `user`(`username`, `realname`, `password`, `email`, `gym`, `belt`, `dateofbirth`, `profilepic`, `biography`, `motto`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        ps.setString(1, jTextFieldUsername.getText());
        ps.setString(2, jTextFieldName.getText());
        ps.setString(3, String.valueOf(jPasswordFieldPass.getPassword()));
        ps.setString(4, jTextFieldEmail.getText());
        ps.setString(5, jTextFieldGym.getText());
        ps.setString(6, jComboBoxBelt.toString());
        ps.setDate(7, convertUtilDateToSqlDate(jDateChooserDOB.getDate()));


        InputStream img = new FileInputStream(new File(imagePath));

        ps.setBlob(8, img);

        if(ps.executeUpdate() != 0)
        {
            JOptionPane.showMessageDialog(null, "Account Created!");
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Oops! Something went wrong!");
        }

        ps.setString(9, jTextAreaBiography.getText());
        ps.setString(10, jTextAreaMotto.getText());
    } 
    catch (Exception ex) 
    {
        Logger.getLogger(RegisterPage.class.getName()).log(Level.SEVERE, null, ex);
    }

Извините, если это прямо, и заранее спасибо заВаша помощь!

Редактировать: Ответил просто, спасибо, что у меня был полный мозговой вывод.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Проблема в вашем коде:

Вы должны установить все значения параметров и затем использовать оператор execute.

ваш код должен выглядеть следующим образом.

ps = con.prepareStatement("INSERT INTO `user`(`username`, `realname`, `password`, `email`, `gym`, `belt`, `dateofbirth`, `profilepic`, `biography`, `motto`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
ps.setString(1, jTextFieldUsername.getText());
ps.setString(2, jTextFieldName.getText());
ps.setString(3, String.valueOf(jPasswordFieldPass.getPassword()));
ps.setString(4, jTextFieldEmail.getText());
ps.setString(5, jTextFieldGym.getText());
ps.setString(6, jComboBoxBelt.toString());
ps.setDate(7, convertUtilDateToSqlDate(jDateChooserDOB.getDate()));


InputStream img = new FileInputStream(new File(imagePath));
ps.setBlob(8, img);
ps.setString(9, jTextAreaBiography.getText());
ps.setString(10, jTextAreaMotto.getText());

if(ps.executeUpdate() != 0)
{
     JOptionPane.showMessageDialog(null, "Account Created!");
}
 else
{
    JOptionPane.showMessageDialog(null, "Oops! Something went wrong!");
}
0 голосов
/ 30 ноября 2018

Вы работаете ps.executeUpdate() без установки параметров 9 и 10.

Переместите эти строки до if(ps.executeUpdate() != 0): -

ps.setString(9, jTextAreaBiography.getText());
ps.setString(10, jTextAreaMotto.getText());
...