首页 > 解决方案 > 插入 oracle 数据库时出现 NullPointerException

问题描述

我在 2 个包中分别有 JDBC 类和 Servlet 类。我尝试从 HTML 表单中获取数据并将其插入到表中。这是获取数据的 Servlet 类代码

public void doPost(HttpServletRequest request, HttpServletResponse response) 
                    throws ServletException, IOException {

    String userName = request.getParameter("UserName");
    String password = request.getParameter("Password");
    String country = request.getParameter("Country");
    String address = request.getParameter("Address");
    String gender = request.getParameter("Gender");
    String years = request.getParameter("Years");
    String bDate = request.getParameter("BirthDate");
    Boolean hasCar = null; 
    if (request.getParameter("Car")!= null){
        hasCar = true;
    }else{
        hasCar = false;
        }

这是 JDBC 类中插入数据的方法

public static void insertData(User user){


        String sql = "insert into users values (1,?,?,?,?,?,?,?,?)";
        PreparedStatement ps = null;
        String userName = user.getUserName();
        String password = user.getPassword();
        String address = user.getAddress();
        String country = user.getCountry();
        String gender = user.getGender();
        int years = Integer.parseInt(user.getYears());
        String bbd = user.getBDate();
        Date bDate = null;
    try {
        bDate = (Date) new SimpleDateFormat("dd/MM/yyyy").parse(bbd);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    boolean hasCar = user.isHasCar();
        try {
            ps.setString(1, userName);
            ps.setString(2, password);
            ps.setString(3, country);
            ps.setString(4, address);
            ps.setString(5, gender);
            ps.setInt(6, years);
            ps.setDate(7, bDate);
            ps.setBoolean(8, hasCar);


            ps = conn.prepareStatement(sql);
            ps.executeUpdate(sql);

        } catch (SQLException e) {
            e.printStackTrace();
        }

我从 Servlet 类中的类用户创建了一个对象,并将其传递给 JDBC 方法并重定向到另一个 html 页面

    User user = new User(userName, password, country, address, gender, years, bDate, hasCar);
    JDBCClass.insertData(user);
response.sendRedirect("Home.html");

但它抛出 java.lang.nullpointerexception

怎么了?

错误照片

标签: javanullpointerexception

解决方案


在您的代码中,您首先定义PreparedStatement ps = null;并调用ps.setString()然后对其进行初始化,这就是导致 NullPointerException 的原因,您需要在使用它之前对其进行初始化

ps = conn.prepareStatement(sql);//need to init it now
ps.setString(1, userName);
ps.setString(2, password);
ps.setString(3, country);
ps.setString(4, address);
ps.setString(5, gender);
ps.setInt(6, years);
ps.setDate(7, bDate);
ps.setBoolean(8, hasCar);


//ps = conn.prepareStatement(sql);//this is the wrong place
ps.executeUpdate(sql);

此外,在插入数据时省略列名是一种非常糟糕的做法

 String sql = "insert into users values (1,?,?,?,?,?,?,?,?)"; //it's bad,since you omit the column name
 String sql = "insert into users (col1,col2,col3,col4,col5,col6,col7,col8,col9)
   values (1,?,?,?,?,?,?,?,?)";

推荐阅读