DAO连接数据库,总是报空指针异常,是为什么?
这是错误提示页:index.html页把表单提交给login.jsp,login.jsp如下:<%@pagecontentType="text/html"pageEnco...
这是错误提示页:
index.html页把表单提交给login.jsp,login.jsp如下:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.sql.*"%>
<%@ page import="com.slf.jdbc.*"%> <!--此包下包括DAO接口和实现类-->
<html>
<jsp:useBean id="user" scope="request" class="com.slf.jdbc.User"/>
<jsp:setProperty name="user" property="*"/>
<body>
<%
UserDao dao=new UserDaoImpl();
int result=dao.addUser(user);
if(result>0){
%>
<h3>注册成功</h3>
<%
}else{
%>
<h3>注册失败</h3>
<%
}
%>
</body>
</html>
另外还有一个DAO接口和一个User类,应该是没有写错的,因为DAO接口里只有一个addUser方法,User类里也都是set和get方法
这是DAO接口的实现类UserDaoImpl:
package com.slf.jdbc;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.slf.jdbc.User;
public class UserDaoImpl implements UserDao{
private Connection conn=null;
private String url="jdbc:mysql://localhost:3306/mldn";
private String driver="com.jdbc.mysql.Driver";
//此方法打开数据库,
public void getConnection(){
try{
Class.forName(driver);
conn=DriverManager.getConnection(url,"root","java");
}catch(SQLException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
//此方法关闭数据库
public void close(Statement stmt)throws SQLException{
if(null!=stmt){
stmt.close();
}
}
//addUser方法,增加用户数据
public int addUser(User user){
PreparedStatement stmt=null;
int result=0;
getConnection();
try{
String sql="INSERT INTO user(userid,name,password) values(?,?,?)";
stmt=conn.prepareStatement(sql); //<-----------报错的也就是这一行,第54行
stmt.setString(1,user.getId());
stmt.setString(2,user.getName());
stmt.setString(3,user.getPassword());
result=stmt.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
close( stmt);
}catch(SQLException e){
e.printStackTrace();
}
}
return result;
}
} 展开
index.html页把表单提交给login.jsp,login.jsp如下:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.sql.*"%>
<%@ page import="com.slf.jdbc.*"%> <!--此包下包括DAO接口和实现类-->
<html>
<jsp:useBean id="user" scope="request" class="com.slf.jdbc.User"/>
<jsp:setProperty name="user" property="*"/>
<body>
<%
UserDao dao=new UserDaoImpl();
int result=dao.addUser(user);
if(result>0){
%>
<h3>注册成功</h3>
<%
}else{
%>
<h3>注册失败</h3>
<%
}
%>
</body>
</html>
另外还有一个DAO接口和一个User类,应该是没有写错的,因为DAO接口里只有一个addUser方法,User类里也都是set和get方法
这是DAO接口的实现类UserDaoImpl:
package com.slf.jdbc;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.slf.jdbc.User;
public class UserDaoImpl implements UserDao{
private Connection conn=null;
private String url="jdbc:mysql://localhost:3306/mldn";
private String driver="com.jdbc.mysql.Driver";
//此方法打开数据库,
public void getConnection(){
try{
Class.forName(driver);
conn=DriverManager.getConnection(url,"root","java");
}catch(SQLException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
//此方法关闭数据库
public void close(Statement stmt)throws SQLException{
if(null!=stmt){
stmt.close();
}
}
//addUser方法,增加用户数据
public int addUser(User user){
PreparedStatement stmt=null;
int result=0;
getConnection();
try{
String sql="INSERT INTO user(userid,name,password) values(?,?,?)";
stmt=conn.prepareStatement(sql); //<-----------报错的也就是这一行,第54行
stmt.setString(1,user.getId());
stmt.setString(2,user.getName());
stmt.setString(3,user.getPassword());
result=stmt.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
close( stmt);
}catch(SQLException e){
e.printStackTrace();
}
}
return result;
}
} 展开
2个回答
推荐于2018-05-04
展开全部
说明getConnection()执行未成功。。。。。。。。getConnection()中不要写try{}catch(){},而是在使用的地方再try{}catch(){} ,,,,这样容易调试
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询