通过ResourceBundle读取配置文件来实现多态的数据库连接

时间:2021-10-12 11:23:25

学习的时候遇到一个利用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