连接数据库时使用java.util.properties有什么好处?

时间:2011-09-22 21:55:32

标签: java oracle jdbc

我正在阅读Oreilly Java Programming With Oracle JDBC edition,我注意到有一个使用java.util.properties对象的例子,如下所示;

public class Connector {


    Connection con = null;
    private Properties info = new Properties();

    public void connect(){
        info.put("user", "sys as sysdba");
        info.put("password", "testpass");
        String driverName = "oracle.jdbc.driver.OracleDriver";

        try {
            Class.forName(driverName);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        String serverName = "localhost";
        String port = "1521";
        String sid = "XE";
        String url = "jdbc:oracle:thin:@" + serverName + ":" + port + ":" + sid;



        try {
            con = DriverManager.getConnection(url, info);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public void closeConnection(){

        try {
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

我检查了API,我了解属性的主要好处是阅读本地资源。 Google OCI驱动程序示例使用java.util.properties以上的驱动程序示例。我的问题是;

*我应该使用瘦驱动程序的属性吗? *如果是,那会有什么好处?

*为什么我不能将完整的详细信息作为我必须使用String对象进行连接的属性?

谢谢

2 个答案:

答案 0 :(得分:5)

属性可以从类路径上的某个jdbc.properties文件加载,允许您进行外部配置。其唯一内容可能如下:

user=sys as sysdba
password=testpass

所以,而不是

info.put("user", "sys as sysdba");
info.put("password", "testpass");

可以

info.load(getClass().getResourceAsStream("/jdbc.properties"));

(请注意,文件名可以自由选择,只要它在运行时类路径中就可以运行)

这样,无论何时想要更改连接详细信息,都无需编辑,重新编译,重建,大惊小怪。您只需编辑一个简单的基于文本的文件。这在需要由没有任何Java知识的人(例如serveradmins)管理的分布式应用程序中特别有用。

另见:

答案 1 :(得分:0)

“要使用JDBC Thin驱动程序以SYSDBA身份登录,必须将服务器配置为使用密码文件。” http://docs.oracle.com/cd/B28359_01/java.111/b31224/dbmgmnt.htm

我正在尝试使用瘦驱动程序以sysdba身份连接到Oracle,但连接失败。我尝试过那里的步骤但是我在这些改变之后的尝试也失败了。

任何对此感兴趣的人,也可能对internal_logon属性感兴趣,因为它是关于登录特定角色(如sysdba)而提到的,但是我再也没有成功使用它。