【问题标题】:username, password etc hardcoded into program - how to pick them up from a file instead?用户名、密码等硬编码到程序中 - 如何从文件中获取它们?
【发布时间】:2012-07-22 23:29:01
【问题描述】:

我在 ECLIPSE 中编写了一些代码。如您所见,用户名、密码、数据库 URL、SQL 查询被硬编码到我的程序中。每次更改密码、数据库的用户名或修改查询时,我都不想更改代码并重新编译它。出于这个原因,我想将这些“参数”放在一个文件中(文本、XML、json ???)。我希望能够轻松更改参数。 所以我该怎么做 ?我应该使用什么样的文件?我想避免使用 XML、json 因为 你需要很好地了解两者。当代码变大时,XML 和 JSON 可能会很困难。

import java.sql.*;

public class JDBCDemo {


static String query = 
        "SELECT customerno, name " +
        "FROM customers;";


public static void main(String[]args)
{
    String username = "cowboy";
    String password = "123456";
    try
    {
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/business", username, password);
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(query);
    }catch(SQLException ex){System.out.println("Exception! " + ex);}

}

}

【问题讨论】:

    标签: java mysql eclipse jdbc configuration-files


    【解决方案1】:

    你可以使用 Properties 并从 .properties 文件中读取值。

    【讨论】:

    • 除非您将应用程序打包为 jar,否则每次更改属性文件时都需要重新构建。
    • @klong :不是真的。您可以使用命令行将目录添加到属性文件所在的类路径中:java -cp config/JDBCDemo
    • @Matt - 我很少使用命令行。我如何在日食中做到这一点?如果我添加一个目录,我的代码将依赖于操作系统。我该如何防止呢?
    【解决方案2】:

    也许this 有帮助。这是此类配置文件的一个示例。

    【讨论】:

      【解决方案3】:
      InputStream inputStream = null;
      Properties properties = new Properties();
      try {
          inputStream = JDBCDemo.class.getClassLoader().getResourceAsStream("jdbc.properties");
          properties.load(inputStream);
      }
      finally {
          try { 
              if (inputStream != null) {
                   inputStream.close();
              }
          }
          catch (IOException e) {
              ;//ignore
          }
      }
      
      String username = properties.get("username");
      

      【讨论】:

        【解决方案4】:

        XML 和 JSON 是结构化格式,因此它们必须是 parsed

        文本文件将是最容易实现的,但由于它是非结构化的,最终用户将需要知道您的程序可以理解的内部格式。例如,额外的空间可能会破坏您的程序。

        【讨论】:

          【解决方案5】:

          曾经想过使用 spring 注入,您可以创建一个包含所有硬编码变量的配置文件,这些变量可以通过 getter 和 setter 放入您的代码中。然后在将来,如果这些变量中的任何一个需要更改,您只需更改 1 个文件 http://www.springsource.org/javaconfig/

          【讨论】:

            【解决方案6】:

            通常,uer-id 和密码(而不是需要从 JAR/WAR 外部配置的任何资源)作为键值对存储在属性文件中。然后您可以使用 ResourceBundle 类访问它们:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ResourceBundle.html

            【讨论】:

              【解决方案7】:

              对于sql 查询,您可以使用数据库functionprocedure,它返回类似于Oracle 中的SYS_REFCURSOR 的某种游标,并从前端调用functionprocedure。通过这样做,您可以避免在 java 代码中对 sql 查询进行硬编码。

              问候

              【讨论】:

                猜你喜欢
                • 2012-11-27
                • 2013-09-24
                • 2014-10-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-11-19
                • 1970-01-01
                相关资源
                最近更新 更多