学习的时候遇到一个利用ResourceBundle读取配置文件,并利用配置文件配置数据连接的例子,在这里记录下来。
需要编写一个类,以达到不改动源代码的前提下实现任意数据库(oracle或者mysql)的连接:
一般来说jdbc的连接步骤如下:
public static void connectDataBase(){
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.建立连接
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123");
//3.获取执行sql语句的Statement对象
Statement state=con.createStatement();
//4.操作sql语句
}
由上面的代码可以看得出来,通过connectDataBase方法,我们只能连接mysql数据库而且是用户名和密码确定的数据库,如果要连接其他类型的数据库,势必要改动源代码,但源代码一般最好不动,常用的方法就是利用配置文件。
显然,要连接其他类型的数据库,有4个参数要改变:数据库驱动,数据库路径,数据库名,数据库密码。这样可以定义一个jdbc.properties文件:
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
USERNAME=root
password=123
通常,读取properties文件采用:
FileInputStream fis=new FileInputStream(url); //url代表properties文件路径。
Properties pro=new Properties();
pro.load(fis);
这里学习到采用ResourceBundle来读取properties文件。
//1.定义几个静态常量用来存储配置文件的值。
private static final String DRIVERCLASS;
private static final String URL;
private static final String USERNAME;
private static final String PASSWORD;
//2.把读取配置文件的代码放入静态代码快中。
static { DRIVERCLASS=ResourceBundle.getBundle("jdbc").getString("driverClass");
URL=ResourceBundle.getBundle("jdbc").getString("url");
USERNAME=ResourceBundle.getBundle("jdbc").getString("username");
PASSWORD=ResourceBundle.getBundle("jdbc").getString("password");
}
//3.同样把注册驱动代码放入静态代码快中。
static { //这个静态快是用来防止执行一次,就加载一次驱动。
try {
Class.forName(DRIVERCLASS);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//4.通过静态方法获取数据库连接对象。
public static Connection getConnection(){
Connection con=null;
try {
con=DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
con.close(); //Connection流资源一定要关闭。
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return con;
}
注意jdbc这个文件要放在src下,才可以用resourceBundle来读取。
上述例子采用的是mysql的连接,这里补充一下oracle数据库的连接:
driverClass=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=system
password=njust