急急急!!! 用java程序与连接数据库时报SQLException异常
这是一个简单的用java的程序连接oracle数据库的小程序,为了以后的方便维护,我把一些连接数据库的参数放到了一个.properties的配置文件中,下面我写了三个类,一个是专门管理从.properties文件拿出配置文件的东西,另一类是专门管理与数据库连接的,最后一个只是一个测试类,该测试类中有一个方法,即是把数据库中的每个数据都拿出来(用select语句,我没有吧里面的东西全部拿出来,只是拿出每一行的ID号)
问题:标题已经说的很清楚了(各位师兄师姐,拜托了啊)
取配置文件类
public class PropertiesUtil {
public static String getValueById(String key){
//String rootPath = System.getProperty("user.dir");
//int end = rootPath.lastIndexOf("//");
//
//rootPath = rootPath.substring(0, end);
//String path = rootPath+"/webapps/BBS/etc/datesource.properties";
//path = path.replace("//", "/");
String path="E:/workplace/myeclipseproject/BBS/WebRoot/etc/dataresources.properties";
String value=null;
Properties pro=new Properties();
try {
pro.load(new FileInputStream(path));
value=(String)pro.get(key);
return value;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return value;
}
}
----数据库连接类
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBConnectionUtil {
private static DBConnectionUtil instance;
public DBConnectionUtil(){}
public static DBConnectionUtil getInstance(){
if(instance==null){
instance=new DBConnectionUtil();
}
return instance;
}
public Connection getConnection(){
Connection conn=null;
try {
String str=PropertiesUtil.getValueById("drivername");
Class.forName(str);
这三句话------System.out.println(PropertiesUtil.getValueById("url"));
我是来验------System.out.println(PropertiesUtil.getValueById("username"));
正,url---- System.out.println(PropertiesUtil.getValueById("password"));
usernamconn=DriverManager.getConnection(PropertiesUtil.getValueById
密码是否正确的,结果打印出来的是正确的
("url"), PropertiesUtil.getValueById("username"), PropertiesUtil.getValueById("password")); --------每次执行这句话之后,跳到@@@@
} catch (ClassNotFoundException e) {
System.out.println("么有找到驱动。。");
} catch (SQLException e) {
System.out.println("连接失败");---@@@@
}
return conn;
}
public void closeConnection(ResultSet rs, PreparedStatement ps,
Connection conn) {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (ps != null) {
ps.close();
ps = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
-----测试类
public class TextDBConnection {
public static void getAll(){
//List<UserInfoDTO> list=new ArrayList<UserInfoDTO>();
DBConnectionUtil util=DBConnectionUtil.getInstance();
Connection conn=util.getConnection();
String sql="select * from user_info";
PreparedStatement ps=null;
ResultSet rs=null;
try {
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
System.out.println("id="+rs.getInt("user_id"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
util.closeConnection(rs, ps, conn);
}
}
----main方法
public static void main(String[] args) {
getAll();
}
}
[最优解释]
lz,恭喜你,你的程序没有问题!
首先,确认你引入驱动的方法正确;其次,你看看数据库的服务启动了吗
我运行过你的程序,没有问题,有什么问题再问!
[其他解释]
是常见的空指针异常,在util包下的TextDBConnection类中的getAll()方法里面有个一值为null的对象。
[其他解释]
DBConnectionUtil util=DBConnectionUtil.getInstance();
Connection conn=util.getConnection();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
具体的错误信息为:
oracle:jdbc:thin:@localhost:1521:orcl-----URL
Exception in thread "main" java.lang.NullPointerException
at util.TextDBConnection.getAll(TextDBConnection.java:22)
at util.TextDBConnection.main(TextDBConnection.java:40)
scott -----用户名
tiger------用户密码
连接失败
[其他解释]
为了看清楚错我截了错图
[其他解释]
我刚才调试了一下,是Connection conn为空值即是上面程序的
conn=DriverManager.getConnection(PropertiesUtil.getValueById("url"), PropertiesUtil.getValueById("username"), PropertiesUtil.getValueById("password"));
为空,但是我有点想不通为什么为空,因为我用myeclipse的DB Browser窗口进行测试连接时,提示连接成功
(相同的JDBC驱动)为啥用程序连接,就连不上
[其他解释]
首先真的谢谢各位师兄师姐,谢谢你们能这么认真处理我的问题,其次,我这个问题,就程序来说是没有问题了因为刚才用mysql进行数据库连接时,没有问题,没有报错而且顺利取出每个值,而为什么用oracle进行连接时有错误,我非常想请教一下给位师兄师姐,你们以前遇到这个问题吗(用oracle数据库不行,而用其他的数据库可以)如果遇到了,那么又是这么解决的呢,很想知道这个答案啊 我用的开发环境:Myeclipse JDBC驱动是oracle14.jar 、oracle 11g数据库
等待回答