【问题标题】:MySQL not pushing insert into database with netbeansMySQL不使用netbeans将插入推送到数据库中
【发布时间】:2018-10-28 03:22:27
【问题描述】:

最近我正在为一个大学项目学习一些 HTML、JSP 和 servlet,问题是我在 MySQL Workbench 中创建了一个数据库,带有 id 主键、自动增量,然后是一些字段,如用户名、密码、名字、姓氏,等等。

目标是创建一个登录页面和注册页面,出于某种原因,如果我使用 MySQL Workbench 将数据推送到数据库中,它将让我使用我的登录表单和我的选择语句检索它,但出于某种原因,我用 register 做同样的事情,但在这种情况下使用查询 INSERT。

所以,经过研究,我做了 preparestatment 并将 executeQuery 更改为 executeUpdate 和所有内容,但我的日志在某处显示 nullPointerException,我知道这可能是一个简单而愚蠢的错误,我没有看到,但我是新人在这。到目前为止,这是您将数据插入我的数据库中所做的:

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 (名字、姓氏、用户名、密码、管理员、提示)值 ('jhon','marston','jmar','123','true','0') 信息:错误: java.lang.NullPointerException

问题是 Netbeans 甚至没有告诉我 NPE 发生在哪里,所以我有点困惑,我不知道查询是错误的还是其他问题,因为正如我在我的输出,查询似乎没问题。

我把我的数据库结构留在这里

【问题讨论】:

  • 尝试在catch 块中使用ex.printStackTrace() 而不是System.out.println(ex.getMessage());
  • @Ivan 谢谢哥们,这真的帮助我更好地了解问题

标签: java mysql sql servlets netbeans


【解决方案1】:

您将 stmt 分配为 null 并且从不初始化它。

 Statement stmt = null;    
 ResultSet rs = null;  

那么你正在尝试使用它:

 rs = stmt.executeQuery(insertQuery);

在使用它之前你需要做一些事情like this

PreparedStatement stmt=currentCon.prepareStatement(yourQuery);

【讨论】:

  • 这很奇怪,因为在我的登录方法中,我以相同的方式对其进行了初始化,并且工作正常,我知道它有问题,但发生的事情有点奇怪
  • @GastónSaillén 你还需要使用stmt.executeUpdate(query) 因为INSERT 语句不会生成ResultSet
  • 哦等等我想我知道它是什么
  • 终于解决了我的问题,感谢大家的帮助!
【解决方案2】:

所以,经过研究,我做了 preparestatment 并更改了 executeQuery 执行更新和一切,但我的日志说 nullPointerException 某处,我知道这可能是一个简单而愚蠢的 我没有看到的错误,但了解我是新手。这是 到目前为止,我所做的是将数据插入到我的数据库中

当我们使用insertupdatedelete 时,我们需要使用executeUpdate。 当我们使用select 时,我们需要使用executeQuery

在您的示例中,您正在为insert 执行executeQuery这是错误的。你需要使用这个:

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();
            }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2013-08-31
    • 1970-01-01
    • 2014-04-17
    相关资源
    最近更新 更多