MySQL не выдвигает вставку в базу данных с NetBeans - PullRequest
0 голосов
/ 17 мая 2018

Недавно я только изучаю некоторые HTML, JSP и сервлеты для университетского проекта, дело в том, что я сделал базу данных в MySQL Workbench с первичным ключом id, автоматическим приращением, а затем с некоторыми полями, такими как имя пользователя, пароль, имя, фамилияи т. д.

Цель состоит в том, чтобы по какой-то причине создать страницу входа и зарегистрировать страницу, если я перенесу данные с MySQL Workbench в базу данных, это позволит мне получить их с помощью формы входа в систему и выбора моего статуса, но по какой-то причине я делаю то же самое с регистром, но в этом случае с запросом INSERT.

Итак, после исследования я выполнил предварительный анализ и изменил executeQuery на executeUpdate и все, но мой журнал говоритгде-то исключение nullPointerException, я знаю, что это может быть простой и глупой ошибкой, которую я не вижу, но я новичок в этом.Это то, что U сделал до сих пор, чтобы вставить данные в мою базу данных:

public static UserBean registarUsuario(UserBean bean){

            //preparing some objects for connection 
     Statement stmt = null;    
     ResultSet rs = null;  

    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException ex) {
        System.out.println("Error al cargar el driver");
        System.out.println(ex.getMessage());
    }

     String firstname = bean.getFirstName();    
     String lastname = bean.getLastName(); 
     String username = bean.getUsername();    
     String password = bean.getPassword();   
     boolean admin = bean.isAdmin(); 
     int tipo = bean.getType(); 
        String insertQuery =
           "insert into idusuario (firstname,lastname,username,password,admin,tipo) values ('"+firstname+"','"+lastname+"','"+username+"','"+password+"','"+admin+"','"+tipo+"')";

        System.out.println("Firstname is " + firstname);          
  System.out.println("Surname is " + lastname);
  System.out.println("Query: "+insertQuery);

  try 
  {
     //connect to DB 
     currentCon = DriverManager.getConnection("jdbc:mysql://localhost:3306/usuarios", "root", "admin");
     rs = stmt.executeQuery(insertQuery);
...

Мой вывод:

Информация: Запрос: вставить в idusuario (имя, фамилия, имя пользователя,значения пароля, admin, tipo) («jhon», «marston», «jmar», «123», «true», «0») Информация: ошибка: java.lang.NullPointerException

Дело в том, что Netbeans даже не сообщает мне, где происходит NPE, так что я в некотором замешательстве, я не знаю, является ли запрос неправильным или что-то еще, потому что, как я вижу в своем выводе,запрос кажется нормальным.

Я оставляю вас здесь, моя структура базы данных

enter image description here

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Итак, после исследования я выполнил предварительную оценку и изменил executeQuery на executeUpdate и все, но мой журнал где-то говорит об исключении nullPointerException, я знаю, что это может быть простая и глупая ошибка, которую я не вижу, но понимаю, что яновое в этом.это то, что я сделал до сих пор для вставки данных в мою базу данных

Когда мы используем insert, update или delete, нам нужно использовать executeUpdate.Когда мы используем select, нам нужно использовать executeQuery.

В вашем примере вы делаете executeQuery для insert. Это неправильно .Вам нужно использовать это:

rs = stmt.executeUpdate(insertQuery);

Вы получаете NPE, потому что вы пытаетесь получить результаты там, где их нет.

Вот хорошая вещь, которая поможет вам уменьшить шаблонный код ... (чтобы вам не приходилось повторяться со значениями инициализации БД)

Создайте класс для вашей базы данныхсоединение:

public class DBConnection {
    private static String url = null;
    private static Connection conn = null;
     public static Connection getConnection(){
     try{
       Class.forName("com.mysql.jdbc.Driver");
       url = "jdbc:mysql://localhost:3306/usuarios";
       conn = DriverManager.getConnection(url,"root","admin");
     }   catch (Exception e) {
            System.out.println(e);
        } 
     return conn;
     }
}

Теперь вы можете использовать это во всех ваших других классах, как это:

public static UserBean registarUsuario(UserBean bean){
          try(Connection conn= DBConnection.getConnection()){
              PreparedStatement pst = conn.prepareStatement("insert into idusuario (firstname,lastname,username,password,admin,tipo) values (?,?,?,?,?,?);");  
              pst.setString(1, bean.getFirstName());
              pst.setString(2, bean.getLastName());
              pst.setString(3, bean.getUserName());
              pst.setString(4, bean.getPassword());
              pst.setBoolean(5, bean.isAdmin());
              pst.setInt(6, bean.getType());
                pst.executeUpdate();    
          }catch (SQLException e) {
                e.printStackTrace();
            }

    }
0 голосов
/ 17 мая 2018

Вы назначаете stmt как ноль и никогда не инициализируете его.

 Statement stmt = null;    
 ResultSet rs = null;  

Затем вы пытаетесь использовать его:

 rs = stmt.executeQuery(insertQuery);

Вам нужно будет что-то сделать как этот , прежде чем использовать его:

PreparedStatement stmt=currentCon.prepareStatement(yourQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...