Java 用户名、密码等硬编码到程序中-如何从文件中取而代之?

Java 用户名、密码等硬编码到程序中-如何从文件中取而代之?,java,mysql,eclipse,jdbc,configuration-files,Java,Mysql,Eclipse,Jdbc,Configuration Files,我在ECLIPSE中编写了一些代码。如您所见,用户名、密码、数据库URL和SQL查询都硬编码到我的程序中。我不想每次更改数据库的密码、用户名或修改查询时都更改代码并重新编译它。出于这个原因,我想把这些“参数”放在一个文件中(文本、XML、json???)。我希望能够轻松地更改参数。 那我该怎么办?我应该使用什么样的文件?我想避免使用XML和json,因为 你需要对两者都很了解。当代码变大时,XML和JSON可能会变得困难 import java.sql.*; public class JDBC

我在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);}

}

}
你可以用 并从.properties文件中读取值

您可以使用
并从.properties文件中读取值

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

可能会有所帮助。这就是这样的配置文件的一个例子。

XML和JSON是结构化格式,因此需要对它们进行修改

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");

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

XML和JSON是结构化格式,因此需要对它们进行修改


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

是否想过使用spring injection,您可以创建一个包含所有硬编码变量的配置文件,通过getter和setter可以将这些变量放入代码中。然后在将来,如果这些变量中的任何一个需要更改,您只需更改1个文件

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

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

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

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


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


视为,除非将应用程序打包为jar,否则每次更改属性文件时都需要重新生成。@klong:不太可能。您可以使用命令行将目录添加到属性文件所在的类路径:java-cp config/JDBCDemo@Matt-我很少使用命令行。在eclipse中如何实现这一点?如果我添加一个目录,我的代码将依赖于操作系统。如何防止这种情况发生?除非将应用程序打包为jar,否则每次更改属性文件时都需要重新生成。@klong:不太可能。您可以使用命令行将目录添加到属性文件所在的类路径:java-cp config/JDBCDemo@Matt-我很少使用命令行。在eclipse中如何实现这一点?如果我添加一个目录,我的代码将依赖于操作系统。我如何防止这种情况?