连接数据库总是出现 java.lang.nullPointerException的错误,该怎么解决啊

nimaaaaaa1 2012-03-31 04:19:23
用的是XP 连接sql server2000下面是代码
package com.yxq.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DB {
private String className;
private String url;
private String username;
private String password;
private Connection con;
private PreparedStatement pstm;

public DB(){
className="com.microsoft.jdbc.sqlserver.SQLServerDriver";
url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=db_luntan";
username="sa";
password="";
try{
Class.forName(className);
}catch(ClassNotFoundException e){
System.out.println("加载数据库驱动程序失败!");
e.printStackTrace();
}
}
public void getCon(){
try {
con=DriverManager.getConnection(url,username,password);
} catch (SQLException e) {
System.out.println("获取数据库连接失败!");
e.printStackTrace();
}
}
public void doPstm(String sql,Object[] params){
if(sql!=null&&!sql.equals("")){
System.out.println(sql);
getCon();
try {
pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
if(params==null){
params=new Object[0];
}
for(int i=0;i<params.length;i++){
pstm.setObject(i+1,params[i]);
}
pstm.execute();
} catch (SQLException e) {
System.out.println("调用DB类中doPstm方法时出错!");
e.printStackTrace();
}
}
}

public ResultSet getRs(){
try {
return pstm.getResultSet();
} catch (SQLException e) {
System.out.println("DB类中的getRs()方法出错!");
e.printStackTrace();
return null;
}
}

public int getUpdate(){
try {
return pstm.getUpdateCount();
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
}

public void closed(){
try{
if(pstm!=null)
pstm.close();
}catch(Exception e){
System.out.println("关闭pstm对象失败!");
}
try{
if(con!=null)
con.close();
}catch(Exception e){
System.out.println("关闭con对象失败!");
}
}


}
错误代码如下
java.lang.NullPointerException
com.yxq.dao.DB.doPstm(DB.java:42)
com.yxq.dao.OpDB.OpUserSingleShow(OpDB.java:345)
com.yxq.action.LogXAction.login(LogXAction.java:70)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
该怎么解决啊 谢谢各位啦先
...全文
1931 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qp7711 2012-04-03
  • 打赏
  • 举报
回复
太抽象了、。。。
五哥 2012-03-31
  • 打赏
  • 举报
回复
获取数据库连接失败!

这个信息后面的异常堆栈信息也给发出来嘛 ?
五哥 2012-03-31
  • 打赏
  • 举报
回复
数据库名字是否正确 ,用户名和密码是否正确 ?
五哥 2012-03-31
  • 打赏
  • 举报
回复
con=DriverManager.getConnection(url,username,password);
这个就没有获取到数据库连接 ;

getCon(); 后你应该加上
if (null == conn)
return ;

你检查一下 ,con=DriverManager.getConnection(url,username,password);
为什么不能获得数据库连接
pengwenzhe59 2012-03-31
  • 打赏
  • 举报
回复
检查一下是不是数据库服务没开,用户名密码是否正确。通常报空指针都是连接不到数据库的问题。
dryZeng 2012-03-31
  • 打赏
  • 举报
回复
con=DriverManager.getConnection(url,username,password);
这一句没取得连接。看是密码问题还是什么问题。

把你完整的错误信息发出来。
nimaaaaaa1 2012-03-31
  • 打赏
  • 举报
回复
总是提示 获取数据库连接失败 - -!
BUG弄潮儿 2012-03-31
  • 打赏
  • 举报
回复
DB.java:42
42行是什么啊?哪里应该有个对象时空的啊
珊瑚 2012-03-31
  • 打赏
  • 举报
回复
没有找到struts里面的action

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧