序言:
好吧,第一次写CSDN博客,其实从一开始学计算机,到现在,快两年了,中间就不断的遇到问题,基本通过上这博客看的
确实挺好的 一直想什么时候开始 把自己遇到的问题和解决方法都写下来,毕竟每次自己遇到麻烦的时候真心 心累
对于像我这样的新手,或许一个小问题可以磨半天
这次 总算开始写了
问题:
写web时,需要用到数据库的数据,参着网上的方法自己写了一个数据库连接类,然而给这个类写个main方法,能够正常读取数据,但用在servlet里时却报空指针java.lang.NullPointerException的异常
连接类DBUtil:
import java.sql.*;
public class DBUtil {
private static String url="jdbc:sqlserver://localhost:1433;DatabaseName=xxx";
private static String driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static Connection conn;
//装载驱动
static{
try{
Class.forName(driverClass);
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
}
//获取数据库连接
public static Connection getConnection(){
try{
conn=DriverManager.getConnection(url,"root","123456");
}
catch(SQLException e){
e.printStackTrace();
}
return conn;
}
public static void main(String[] args)throws ClassNotFoundException, SQLException{
Connection conn=DBUtil.getConnection();
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select name from student");
while(rs.next()){//返回值是boolean类型
System.out.println(rs.getString("name").trim());
}
}
//关闭数据库连接
public static void Clse(){
if(conn!=null){
try{
conn.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
}
好吧,全部贴上来了,接下来是在servlet中用到这个类,代码一部分
try {
Statement stmt;
stmt = DBUtil.getConnection().createStatement();
ResultSet rs=stmt.executeQuery("select pass from teacher where phonenum='"+userName+"'");
if(rs.next()){
if(rs.getString("pass").equals(passWord)){
isFound=true;
HttpSession session=request.getSession();
session.setAttribute("userName", userName);
response.sendRedirect("index.jsp");
}
}
if(!isFound)
response.sendRedirect("inputerror.jsp");
} catch (SQLException e) {
e.printStackTrace();
}
就是这样,运行。。。。。。。报错了!空指针异常,错误发生在 stmt = DBUtil.getConnection().createStatement(); 这一行
讲道理 没错啊 看起来稳的一痞
不扯了 ,,
解决:
个人的解决方法是 除了在工程中导入数据库驱动包,在 tomcat 的 lib 目录下也要放入数据库驱动的 jar 包,也就是说 这个jar包要放两个地方,毕竟这是tomcat服务需要用到的(我的理解)
或者:将驱动jar包放置WebContent > WEB-INF > lib 文件夹下,并Add to build Path,应该都行
大概就是这样 ,解决了空指针异常
当然遇到这问题,前提是数据库服务的各种配置啊,端口啊什么的都要弄好了
另外:顺带扯一句 ,当时我用的是 sql server 2008 R2 SP2,无论怎么弄,测试 telnet 127.0.0.1:1433都不成功
经过一番苦搜,将SP2升级到SP3 done!