| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1549 人关注过本帖
标题:请教 InputStream in=JDBCtools.class.getClass().getClassLoader().getRes ...
只看楼主 加入收藏
神龙火炬
Rank: 1
来 自:广西柳州
等 级:新手上路
帖 子:13
专家分:5
注 册:2014-11-11
结帖率:100%
收藏
 问题点数:0 回复次数:2 
请教 InputStream in=JDBCtools.class.getClass().getClassLoader().getResourceAsStrea
程序代码:
public static  Connection getconnection2() throws Exception{
        Properties properties=new Properties();
        InputStream in=
                JDBCtools.class.getClass().getClassLoader().getResourceAsStream("jdbc.properties");//这里出错!!!
    properties.load(in);
    String user=properties.getProperty("user");
    String password=properties.getProperty("password");
    String jdbcUrl=properties.getProperty("jdbcUrl");
    String driver=properties.getProperty("driver");
    Class.forName(driver);
    return DriverManager.getConnection(jdbcUrl,user,password)


java源程序
程序代码:
public void  testResultSet() {
        Connection conn=null;
        Statement statement=null;
        ResultSet rs=null;
        try {
            conn=JDBCtools.getconnection2();//这里出错
            statement=conn.createStatement();
            String sql="SELECTid,name,email,brith"
                    + "FROM customers WHERE id=2";
            rs=statement.executeQuery(sql);
            if(rs.next()){
                int id=rs.getInt(1);
                String name=rs.getString("name");
                String email=rs.getString(3);
                Date brith=rs.getDate(4);
                System.out.println(id);
                System.out.println(name);
                System.out.println(email);
                System.out.println(brith);
            }
                    
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }finally{
            JDBCtools.release(rs, statement, conn);
        }
        
        
    }
2014-12-07 21:09
日知己所无
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:38
帖 子:427
专家分:2071
注 册:2014-3-22
收藏
得分:0 
调试的时候,jdbc.properties放到一个绝对路径里,代码里也用绝对路径
2014-12-07 21:13
xixiqiqi
Rank: 2
等 级:论坛游民
帖 子:22
专家分:71
注 册:2013-10-10
收藏
得分:0 
在楼主的第一段程序中,楼主标注的地方是不出错的,如果没有找到资源以上方法返回null.
如果in为null,下面一行properties.load(in)才会抛出NullPointerException

如果用楼主的写法资源到底放在什么地方才能被找到?其实楼主看看自己写的代码应该就能想明白,
JDBCtools.class.getClass().getClassLoader().getResourceAsStream("jdbc.properties")
代码的意思是先得到JDBCtools的Class对象,然后得到这个类的加载器,最后用这个加载器去加载需要的资源文件

那么首先弄明白是用的哪一个加载器?
加载JDBCtools类的加载器应该就是System加载器.

为什么要弄明白是哪一个加载器?
因为明白是用的哪一个加载器就明白了目前的加载路径.

明白加载路径有什么用?
明白加载路径就明白资源放在哪里会被找到.

那么System加载器的加载路径是哪里?
环境变量classpath 或者 系统属性java.class.path
所以楼主只要明白你的classpath在哪儿,就明白只写资源名的情况下,把资源放在哪儿能被找到

道理明白了,具体的改正方法:
第一种方法,修改classpath让其指向你所需要的资源文件jdbc.properties.
第二种方法,把你所需要的资源文件jdbc.properties放到默认的classpath中就行.
         
补充:
默认的classpath是哪里?
当然就是.
.在哪里?
a.当使用命令行方式使用java命令时,.就是当前目录,资源文件放在当前目录
b.当使用IDE如Exlipse时,资源放在src下
  (补充,src下资源文件真实放在了哪里?java工程时,在/bin中;javaweb工程时,在\WebRoot\WEB-INF\classes中)

留个问题帮楼主想明白,如果像以下这样写,资源应该放在哪里?
JDBCtools.class.getClass().getClassLoader().getResourceAsStream("net/bccn/bbs/jdbc.properties")
2014-12-08 01:42
快速回复:请教 InputStream in=JDBCtools.class.getClass().getClassLoader().g ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044041 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved