【问题标题】:How to externalize strings in the SQL Connection class如何在 SQL Connection 类中外部化字符串
【发布时间】:2019-07-06 06:26:07
【问题描述】:

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

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

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

我的 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。

【问题讨论】:

    标签: java sqlite jdbc


    【解决方案1】:

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

    这将允许您的应用程序的用户在不修改源代码的情况下连接到不同的数据库。他们需要做的就是修改包含配置属性的属性文件。

    现在,究竟什么需要外化是有争议的。要考虑的一件事是,您的代码可能是特定于 SQLite 的,因为数据库将始终是 SQLite,或者因为您依赖于 SQLite 特定的 SQL 或行为。所以不清楚驱动类名("org.sqlite.JDBC")是否应该是参数。

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


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

    【讨论】:

    • 嗨,斯蒂芬,感谢您的回答。让我们假设 SQL 行为并非特定于 SQLite。我应该如何配置这个?我正在考虑使用键:值对在 src 之外创建一个文本文件,并在我的实用程序类中编写一个静态方法以通过传递键返回值。然后,我将在我想传递字符串的任何地方调用此方法。这是正确的做法吗?
    【解决方案2】:

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

    //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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2015-02-23
      • 1970-01-01
      相关资源
      最近更新 更多