这是一个简单的用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"));
usernam conn=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();
}}

解决方案 »

  1.   

    usernam conn=DriverManager.getConnection(PropertiesUtil.getValueById("url"), PropertiesUtil.getValueById("username"), PropertiesUtil.getValueById("password"));usernam是什么类型?能直接接受conn?
      

  2.   

    drivername=?
    貌似缺少:class12.jar
      

  3.   

    fangmingshijie那位师兄username 是登陆的用户名 是用来注释说明那三个打印语句 数据库驱动我导入了 顺便说一下:我用的ojdbc14.jar驱动
    下面是连接数据库的连接的源代码即是我上面发的贴的DBConnectionUtil类  ====希望各位师兄师姐帮我把这个错找出来啊
    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"));
    System.out.println(PropertiesUtil.getValueById("password"));
    conn=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();
    }
    } }
    具体的错误信息为:
    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------用户密码
    连接失败
      

  4.   

    是常见的空指针异常,在util包下的TextDBConnection类中的getAll()方法里面有个一值为null的对象。
      

  5.   

    我刚才调试了一下,是Connection conn为空值即是上面程序的
    conn=DriverManager.getConnection(PropertiesUtil.getValueById("url"), PropertiesUtil.getValueById("username"), PropertiesUtil.getValueById("password"));
    为空,但是我有点想不通为什么为空,因为我用myeclipse的DB Browser窗口进行测试连接时,提示连接成功
    (相同的JDBC驱动)为啥用程序连接,就连不上
      

  6.   

    DBConnectionUtil util=DBConnectionUtil.getInstance();
    Connection conn=util.getConnection();
    这里有问题吧
      

  7.   

    首先真的谢谢各位师兄师姐,谢谢你们能这么认真处理我的问题,其次,我这个问题,就程序来说是没有问题了因为刚才用mysql进行数据库连接时,没有问题,没有报错而且顺利取出每个值,而为什么用oracle进行连接时有错误,我非常想请教一下给位师兄师姐,你们以前遇到这个问题吗(用oracle数据库不行,而用其他的数据库可以)如果遇到了,那么又是这么解决的呢,很想知道这个答案啊  我用的开发环境:Myeclipse JDBC驱动是oracle14.jar 、oracle 11g数据库  
    等待回答