mysql不使用netbeans将insert推入数据库

wydwbb8l  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(581)

最近我在为一个大学项目学习一些html、jsp和servlet,我把一个数据库做成mysql workbench,id主键,自动递增,然后是用户名、密码、名字、姓氏等字段。
目标是创建一个登录页和注册页,出于某种原因,如果我使用mysql workbench将数据推入数据库,它将允许我使用登录表单和select语句检索数据,但是出于某种原因,我使用register做同样的事情,但在本例中是使用查询insert。
所以,经过研究,我做了准备,把executestation改成了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(firstname,lastname,username,password,admin,tipo)值('jhon','marston','jmar','123','true','0')信息:错误:java.lang.nullpointerexception
问题是netbeans甚至没有告诉我npe发生在哪里,所以我有点困惑,我不知道这个查询是错误的还是其他的错误,因为正如我在输出中看到的,这个查询似乎是正确的。
我把我的数据库结构留给你

pgpifvop

pgpifvop1#

你在协助 stmt 为null并且从不初始化它。

Statement stmt = null;    
 ResultSet rs = null;

那么你是在尝试使用它:

rs = stmt.executeQuery(insertQuery);

在使用之前,您需要执行以下操作:

PreparedStatement stmt=currentCon.prepareStatement(yourQuery);
bvk5enib

bvk5enib2#

所以,在研究之后,我做了准备,把executestation改成executeupdate等等,但是我的日志说某个地方有一个nullpointerexception,我知道这可能是一个简单而愚蠢的错误,我没有看到,但我知道我在这方面是新手。这是我到目前为止所做的将数据插入数据库的工作
当我们使用 insert , update 或者 delete 我们需要使用 executeUpdate . 当我们使用 select 我们需要使用 executeQuery .
在你的例子中,你在做什么 executeQuery 对于一个 insert . 这是错误的。您需要使用:

rs = stmt.executeUpdate(insertQuery);

你得到一个npe是因为你试图在没有结果的地方检索结果。
下面是一个很好的方法来帮助您减少样板代码(因此,您不必一直重复使用db初始化值)
为数据库连接创建类:

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

    }

相关问题