求助 程序运行老是报空指针错误

改昵称已被用 2015-07-23 11:38:47
package com.pb.news.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ConfigManager {
private static ConfigManager configManager;
private static Properties properties;
private ConfigManager(){
String configFile="database.properties";
properties=new Properties();
InputStream in=ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
try {
properties.load(in);
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public static ConfigManager getInstance(){
if(configManager==null){
configManager=new ConfigManager();
}
return configManager;
}
public String getString (String key){
return properties.getProperty(key);
}
}



package com.pb.news.dao;

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

import com.pb.news.util.ConfigManager;

//基类:数据库操作通用类
public class BaseDao {
protected Connection conn;
protected PreparedStatement ps;
protected Statement stmt;
protected ResultSet rs;

// 获取数据库连接
public boolean getConnection() {
// 读出配置信息
String driver=ConfigManager.getInstance().getString("jdbc.driver_class");
String url=ConfigManager.getInstance().getString("jdbc.connection.url");
String username=ConfigManager.getInstance().getString("jdbc.connection.username");
String password=ConfigManager.getInstance().getString("jdbc.connection.password");
// 加载JDBC驱动
try {
Class.forName(driver);
// 与数据库建立连接
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}

// 增删改 delete from news_detail where id=? and title=?
public int executeUpdate(String sql, Object[] params) {
int updateRows = 0;
getConnection();
try {
ps=conn.prepareStatement(sql);
//填充占位符
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
updateRows=ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return updateRows;
}

// 查询
public ResultSet executeSQL(String sql,Object[] params) {
getConnection();
try {
ps=conn.prepareStatement(sql);
//填充占位符
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
rs=ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}

// 关闭资源
public boolean closeResource() {
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
return true;
}

}


报错

Exception in thread "main" java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.pb.news.dao.BaseDao.getConnection(BaseDao.java:28)
at com.pb.news.dao.BaseDao.executeSQL(BaseDao.java:62)
at com.pb.news.dao.impl.NewsDaoImpl.getNewsList(NewsDaoImpl.java:23)
at com.pb.news.dao.impl.NewsDaoImpl.main(NewsDaoImpl.java:103)

数据库驱动是:
Ojdbc14.jar
求大神解答
...全文
222 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
迷林 2015-07-25
  • 打赏
  • 举报
回复
线程异常,那个地方已经被占用了,你是不是添加了线程安全了 的?
sinat_30072435 2015-07-24
  • 打赏
  • 举报
回复
其实空指针这种问题一个debug就出来了 自己多尝试
buaazhuo 2015-07-24
  • 打赏
  • 举报
回复
一般空指针异常都是小的疏忽造成的,多DEBUG,耐心查找就好
shixitong 2015-07-24
  • 打赏
  • 举报
回复
database.properties贴出来看看
纯洁袜子 2015-07-24
  • 打赏
  • 举报
回复
对啊,错误行在BaseDao.java中的28行,你仔细去检查一边,不会debug你就把一些用到的变量都输出一边,看是到底哪个是null的,这很快就可以找出来的
C2de很有范 2015-07-24
  • 打赏
  • 举报
回复
引用 4 楼 buaazhuo 的回复:
一般空指针异常都是小的疏忽造成的,多DEBUG,耐心查找就好
读取配置文档,单写的时候没有问题,
C2de很有范 2015-07-24
  • 打赏
  • 举报
回复
引用 2 楼 zyb112211 的回复:
对啊,错误行在BaseDao.java中的28行,你仔细去检查一边,不会debug你就把一些用到的变量都输出一边,看是到底哪个是null的,这很快就可以找出来的
在Class.forName(driver);报的空指针
C2de很有范 2015-07-24
  • 打赏
  • 举报
回复
引用 3 楼 shixitong 的回复:
database.properties贴出来看看
这应该没有问题吧 jdbc.driver_class=oracle.jdbc.driver.OracleDriver jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl jdbc.connection.username=system jdbc.connection.password=111111

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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