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回答
同学你好!
经过老师测试你这么写可以,但是有个问题:
你使用了以下这个语句
JDBCUtil.class.getResourceAsStream("JDBC.properties")
它只会加载当前类同包下的资源,也就是你的JDBCUtil.java必须和你的JDBC.properties在同一个包下面如果需要从src开始必须填写 ‘’/‘’,都则会报错。
JDBCUtil.class.getResourceAsStream("/JDBC.properties")
但是如果是使用类加载ClassLoader加载src的资源,这样直接就是加载src下面的资源。一般都是使用这种方式来完成
JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
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);
}
}
好帮手慕柯南
2019-11-21
同学你好!
老师在本地进行测试,使用JDBCUtils.class.getRescourceAsStream("jdbc.properties")是会报错。同学你使用的jdk是1.8吗?同学是否修改后忘记保存了呢?同学修改保存后clean一下项目,重新测试看一下结果
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
相似问题