JDBC工具类中,不写getClassLoader()也能读取到配置文件

来源:4-3 选择题

java小白中的小学生

2019-11-21 10:01:46

JDBC工具类中,JDBCUtils.class.getClassLoader().getRescourceAsStream("jdbc.properties"),不写getClassLoader()也能读取到配置文件。可以不写吗?直接JDBCUtils.class.getRescourceAsStream("jdbc.properties")

写回答

3回答

好帮手慕柯南

2019-11-21

同学你好!

经过老师测试你这么写可以,但是有个问题:

你使用了以下这个语句

JDBCUtil.class.getResourceAsStream("JDBC.properties")

它只会加载当前类同包下的资源,也就是你的JDBCUtil.java必须和你的JDBC.properties在同一个包下面如果需要从src开始必须填写   ‘’/‘’,都则会报错。

JDBCUtil.class.getResourceAsStream("/JDBC.properties")

但是如果是使用类加载ClassLoader加载src的资源,这样直接就是加载src下面的资源。一般都是使用这种方式来完成

JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0

java小白中的小学生

提问者

2019-11-21

老师,我是这样写的工具类,您看看可以吗?

public class JDBCUtil {


private static  String driverClass;

private static  String url;

private static  String username;

private static  String password;

private JDBCUtil() {}

static {

//读取配置文件,并完成连接字符串

Properties p = new Properties();

try {

p.load(JDBCUtil.class.getResourceAsStream("JDBC.properties"));//通过类的加载器的方式获取输入流

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

String ip = p.getProperty("IPAdress");

String port = p.getProperty("port");

String db = p.getProperty("database");

String tz = p.getProperty("timezone");

driverClass = p.getProperty("driverClass");

url = "jdbc:mysql://"+ip+":"+port+"/"+db+"?useUnicode=true&characterEncoding=utf-8&serverTimezone="+tz;

username = p.getProperty("username");

password = p.getProperty("password");

try {

Class.forName(driverClass);// 1.加载驱动

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static Connection getConnection() {

Connection conn = null;

try {

conn = DriverManager.getConnection(url, username, password);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

public static void close(Connection conn, Statement pst, ResultSet rs) {

if(rs != null) {

try {

rs.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

rs = null;

}

if(pst != null) {

try {

pst.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

pst = null;

}

if(conn != null) {

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

conn = null;

}

}

public static void close(Connection conn, Statement pst) {

close(conn, pst, null);           

}

public static void close(Connection conn) {

close(conn, null, null);

}

public static void close(Statement pst, ResultSet rs) {

close(null, pst, rs);

}

}


0

好帮手慕柯南

2019-11-21

同学你好!

老师在本地进行测试,使用JDBCUtils.class.getRescourceAsStream("jdbc.properties")是会报错。同学你使用的jdk是1.8吗?同学是否修改后忘记保存了呢?同学修改保存后clean一下项目,重新测试看一下结果

http://img.mukewang.com/climg/5dd62f8a09eaf06d02400228.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0
hava小白中的小学生
h 您指的错误是这个吗,Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.但底下也正常获得连接了com.mysql.cj.jdbc.ConnectionImpl@6be46e8f
h019-11-21
共1条回复

0 学习 · 8016 问题

查看课程