如何外部化SQL Connection类中的字符串

时间:2019-07-06 06:26:07

标签: java sqlite jdbc

我是Java编程的新手。我有一个连接到数据库的SQL连接类。

我的指导老师审查了我的代码,他问我“使用属性文件外部化字符串”。我不确定他的意思是什么以及如何去做。

我在网上进行了研究,发现了有关蚀向导和国际化的文章。这让我更加困惑。我不确定是否应该遵循它。

我的SQL Connection类如下。

public class SQLConnection {
    Connection conn = null;
    public static Connection dbConnector() {
        try {
            Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:xxxdbnamexxx.db");

            return conn;
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
            return null;
        }
    }
}

我希望连接类像在字符串外部化之后一样返回连接。

如果有帮助,我会使用Eclipse IDE。

3 个答案:

答案 0 :(得分:2)

您的指导者意味着您的应用程序应该从属性文件(或类似文件)中获取字符串“ jdbc:sqlite:xxxdbnamexxx.db”以及可能的“ org.sqlite.JDBC”,而不是将其硬连接到代码中。 / p>

这将允许您的应用程序用户连接到其他数据库,而无需修改源代码。他们所需要做的就是修改包含配置属性的属性文件。

现在有争议的是,究竟需要将哪些内容具体化。要考虑的一件事是您的代码可能是特定于SQLite的,这是因为数据库将始终是SQLite,或者因为您依赖于特定于SQLite的SQL或行为。因此,尚不清楚驱动程序类名称("org.sqlite.JDBC")是否应为参数。

有很多可能的方法来进行外部化,但是简单的方法是使用java.util.Properties对象及其加载和保存方法。有关详细信息,请参见javadocs


这与国际化无关,在国际化中,应用程序从“资源包”中获取用户消息,具体取决于应用程序运行的语言环境。

答案 1 :(得分:0)

我不确定是否有一种简单的方法。但是您可以这样做:

//Properties is a class:
Properties prop=new Properties();
//read file
InputStream in = 
BaseDao.class.getClassLoader().getResourceAsStream("jdbc.properties");
prop.load(in);
//load file
String userName = prop.getProperty("userName");
String pwd = prop.getProperty("pwd");
String url = prop.getProperty("url");
String driver = prop.getProperty("driver");
// database driver
Class.forName(driver);
// get connection
Connection conn = DriverManager.getConnection(url, userName, pwd);

并创建一个名为“ jdbc.properties”的新文件,该文件位于资源目​​录的根目录中:

userName=root
pwd=password
// sqlite driver name
driver=org.sqlite.JDBC
// address of your database 
url=jdbc:sqlite:personName.db

答案 2 :(得分:-1)

DriverManager.html#getConnection是重载方法。您正在使用接受单个字符串的the simple version。还存在其他版本,例如one that accepts the URL, the username and the password

您可以像这样使用它:

// The three arguments are here just for demonstration. Read them from a file,
// pass them as environment variables or as user input.
String url = "jdbc:sqlite:xxxdbnamexxx.db";
String username = "dbuser";
String password = "secret-password";

Connection conn = DriveManager.getConnection(url, username, password);

您应该将这三个字符串直接放在代码中。将其放入代码可以读取的外部文件中,或将其作为环境变量传递给程序。