Почему возникает ошибка при обновлении информации в базу данных SQL из кода Java? - PullRequest
0 голосов
/ 20 сентября 2019

Я пишу код для страницы регистрации в системе.Как только кнопка нажата, система проверит, не старше ли пользователя 14 лет. Если true, система должна сохранить все введенные данные в базу данных SQL.

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
       // TODO add your handling code here:
       int age = Integer.parseInt(Age_Input.getText());
       String firstname = FirstName_Input.getText();
       String surname = Surname_Input.getText();
       String email = Email_Input.getText();
       String userid = UserID_InputSignUp.getText();
       char[] pass = Password_InputSignUp.getPassword();

       if (age<14) {
           JOptionPane.showMessageDialog(null,"Sorry, You need to be at least 14 years to use this software... ");
           new Login_Page().setVisible(true);
           this.setVisible(false);
       } else {
           try {
              Class.forName("com.mysql.cj.jdbc.Driver");
              Connection connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/user_info", "root", "nerdswonka");
              Statement stmt = connect.createStatement();

              String query1 = "INSERT INTO user_info(user_id, password, firstname, lastname, emailid, age) VALUES('"+userid+"', "+Arrays.toString(pass)+", '"+firstname+"', '"+surname+"', '"+email+"', "+age+");";
              stmt.executeUpdate(query1);

              JOptionPane.showMessageDialog(null, "Account Creation succesful!");
              stmt.close();
              connect.close();

          } catch (Exception e) {
              JOptionPane.showMessageDialog(null, "Error in connecting to SQL Database");
        }

          new Login_Page().setVisible(true);
          this.setVisible(false);
    }

}                                                                 

Код ничего не обновляет в базе данных, а просто показывает JOptionPane после возникновения исключения (ошибки).Какие изменения можно внести в код, чтобы значения сохранялись в SQL?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

Непосредственной причиной ошибки, вероятно, является то, что ваш оператор INSERT содержит следующую строку, которая не заключена в одинарные кавычки:

Arrays.toString(pass)

Однако , вы должны полностью отказаться от своеготекущий подход и вместо этого используйте подготовленный оператор:

String sql = "INSERT INTO user_info (user_id, password, firstname, lastname, emailid, age) " +
    "VALUES (?, ?, ?, ?, ?, ?)";

try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_info", "root", "nerdswonka");
    PreparedStatement ps = conn.prepareStatement(sql)) {
        ps.setString(1, userid);
        ps.setString(2, Arrays.toString(pass));
        ps.setString(3, firstname);
        ps.setString(4, surname);
        ps.setString(5, email);
        ps.setInt(6, age);

        int row = ps.executeUpdate();
        System.out.println(row); // rows inserted (should be 1)

    }
    catch (SQLException e) {
        System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

Подготовленные операторы делают много вещей, одним из которых является обработка беспорядочных деталей о том, как правильно экранировать ваши литеральные данные в запросе SQL.В этом случае они освобождают вас от необходимости беспокоиться о размещении одинарных кавычек вокруг интерполированных строк Java.Утверждения также предотвращают такие плохие вещи, как внедрение SQL.

0 голосов
/ 20 сентября 2019

Вы не печатаете свое исключение в блоке catch.Вы можете использовать e.printStackTrace ();сначала распечатать исключение.

...