JavaWeb 空指针报错

javaweb项目中,想实现注册功能,点击注册按钮后,出现 java.lang.NullPointerException: Cannot invoke "java.sql.Connection.prepareStatement(String)" because "conn" is null 错误
检查过数据库名和表名,没问题,请大家看看哪里出错了,我也按照网上的方法,把数据库驱动导入到Tomcat的lib文件夹下了,还是不行。


@WebServlet(name = "register")
public class register extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        String empname = request.getParameter("empname");
        String emppw = request.getParameter("emppw");
        String empsex = request.getParameter("empsex");
        String empage = request.getParameter("empage");

        //        创建员工实体
        EMPLOYEE e = new EMPLOYEE(empname,emppw,empsex,empage);


        //        加入到数据库中
        int count = empdao.insert(e);

        System.out.println(e);


        //        成功或失败重定向到哪里

        if(count > 0){
            PrintWriter out = response.getWriter();
            out.write("<script>");
            out.write("alert('员工添加成功')");
            out.write("</script>");
            response.sendRedirect("login_web.jsp");

        }
        else {
            PrintWriter out = response.getWriter();
            out.write("<script>");
            out.write("alert('员工已存在')");
            out.write("</script>");
         out.write("location.href='reg");
//            out.write("");
//            out.write("");

        }
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/081800376656156.png "#left")

```java
public class EMPLOYEE {
    private String employee_name;
    private String employee_password;
    private String employee_sex;
    private String employee_age;

    public EMPLOYEE(String name, String password, String sex, String age){
        super();
        employee_name = name;
        employee_password = password;
        employee_sex = sex;
        employee_age = age;
    }
    public String getEmployee_name() {
        return employee_name;
    }
    public String getEmployee_password() {
        return employee_password;
    }
    public String getEmployee_sex() {
        return employee_sex;
    }
    public String getEmployee_age() {
        return employee_age;
    }

    public void setEmployee_name(String employee_name) {

        this.employee_name = employee_name;
    }
    public void setEmployee_password(String employee_password)
    {
        this.employee_password = employee_password;
    }
    public void setEmployee_sex(String employee_sex) {
        this.employee_sex = employee_sex;
    }
    public void setEmployee_age(String employee_age) {
        this.employee_age = employee_age;
    }
}



```java
public class empdao {
//    插入数据
    public static  int insert(EMPLOYEE e){
        String sql = "insert into employee values(?, ?, ?, ?)";
        Object[] params = {e.getEmployee_name(),
                            e.getEmployee_password(),
                            e.getEmployee_sex(),
                            e.getEmployee_age()};
        return Basedao.exectuIUD(sql, params);
    }
}


```java
public class Conn {
    public static void main(String[] args) {
        Connection con = null;
        //jdbc驱动
        String driver="com.mysql.cj.jdbc.Driver";
        //这里我的数据库是cxxt
        String url="jdbc:mysql://localhost:3306/pet?&useSSL=false&serverTimezone=UTC";
        String user="root";
        String password="admin";
        try {
            //注册JDBC驱动程序
            Class.forName(driver);
            //建立连接
            con = DriverManager.getConnection(url, user, password);
            Statement stmt = con.createStatement();
            String sql;
            sql = "select * from employee";
            ResultSet ret = stmt.executeQuery(sql);
            while (ret.next()){
                String name = ret.getString("empname");
                System.out.println("empname:"+name);
            }
            if (!con.isClosed()) {
                System.out.println("数据库连接成功");
            }
            con.close();
        } catch (ClassNotFoundException e) {
            System.out.println("数据库驱动没有安装");

        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("数据库连接失败");
        }
    }
}
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/073520376656128.png "#left")

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/626470376656140.png "#left")

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/999021376656191.png "#left")

空指针说明你在while那里调用next()的时候出错了
String name = ret.getString("empname");
你这句话有问题,getString()里传的是int 类型的数据

首先确认下你本地安装的数据库版本是否是8.0以上的,如果不是,驱动改成String driver="com.mysql.jdbc.Driver";其次,将你的Conn类上添加一个@Component注解,最后,启动服务时一定启动本地数据库服务

获取不到数据库连接。数据库配置有问题。

你的Conn类里面只有main方法,但是你是conn是空指针异常,说明没有bean初始化,你看下你哪里调用了conn.
注意:你的web应用启动的入口和你贴出的main代码不是一个入口。

图片都看不了

img

连接中 ?&,去掉&试试

1、jdbc驱动改为如下:
String driver="com.mysql.jdbc.Driver";
2、url ?号的&去掉

你看看你的数据库版本,是不是8以上的

异常信息说Basedao类的54行使用的conn变量为null,检查一下这个变量是如何赋值的

搞定了吗,数据库连接不上 你的url路径好像有问题