繁体   English   中英

MySQL不使用NetBeans将插入推入数据库

[英]MySQL not pushing insert into database with netbeans

最近,我只是在为一个大学项目学习一些HTML,JSP和servlet,问题是我使用id主键,自动递增,然后是一些字段(如用户名,密码,名字,姓氏等)将数据库放入MySQL Workbench。上。

目的是创建一个登录页面和注册页面,由于某种原因,如果我使用MySQL Workbench将数据推送到数据库中,它将使我可以使用登录表单和选择语句来检索它,但是由于某些原因,我还是这样做带有注册的东西,但在这种情况下是查询INSERT。

因此,经过研究,我做了preparestatment,并将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);
...

我的输出:

信息:查询:将值('jhon','marston','jmar','123','true','0')插入到idusuario(名字,姓氏,用户名,密码,admin,tipo)中信息:错误:显示java.lang.NullPointerException

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

我把数据库结构留给你

在此处输入图片说明

您将stmt为null,并且从未对其进行初始化。

 Statement stmt = null;    
 ResultSet rs = null;  

然后,您尝试使用它:

 rs = stmt.executeQuery(insertQuery);

你需要做一些这样你使用它之前:

PreparedStatement stmt=currentCon.prepareStatement(yourQuery);

因此,经过研究,我确实做了preparestatment,并将executeQuery更改为executeUpdate和其他所有内容,但是我的日志在某处显示了nullPointerException,我知道这可能是一个简单而愚蠢的错误,我没有看到,但是我了解到这是一个新问题。 到目前为止,这是我将数据插入数据库的方法

当我们使用insertupdatedelete我们需要使用executeUpdate 当使用select我们需要使用executeQuery

在您的示例中,您正在执行executeQueryinsert 这是错的 您需要使用此:

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

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM