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 {
}
}

```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("数据库连接失败");
}
}
}



空指针说明你在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代码不是一个入口。
图片都看不了
连接中 ?&,去掉&试试
1、jdbc驱动改为如下:
String driver="com.mysql.jdbc.Driver";
2、url ?号的&去掉
你看看你的数据库版本,是不是8以上的
异常信息说Basedao类的54行使用的conn变量为null,检查一下这个变量是如何赋值的
搞定了吗,数据库连接不上 你的url路径好像有问题