如何使用.properties文件来存储数据库连接属性?

问题描述 投票:0回答:4

我需要在Java中使用

.properties
文件来存储数据库信息。

这是我的数据库连接器类。它给了我一个

NullPointerException
。我的代码有什么问题吗?

注意,我还没有分配这些属性文件值。数据库连接值仍然是硬编码的。

import java.io.IOException;
import java.io.InputStream;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;


public final class Database {

    public Connection connection;
    private Statement statement;
    private Properties property;
    public static Database database;

    private Database() {

        String url = "jdbc:mysql://localhost:3306/";
        String dbName = "edus";
        String driver = "com.mysql.jdbc.Driver";
        String userName = "root";
        String password = "";
        try {
            InputStream is = Database.class.getClassLoader().getResourceAsStream(
                "config.properties");
            property.load(is);
            System.out.println(property.getProperty("db_user"));
            System.out.println(property.getProperty("db_password"));
            System.out.println(property.getProperty("db_name"));

            Class.forName(driver).newInstance();
            this.connection = (Connection) DriverManager.getConnection(url + dbName,
                    userName, password);
        }catch (IOException ex) {
            Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException e) {
            System.out.println("JDBC driver is missing");
        } catch (InstantiationException | IllegalAccessException | SQLException e) {
            e.printStackTrace();
        } 
    }

    public static synchronized Database getDatabaseConnection() {
        if (database == null) {
            database = new Database();
        }
        return database;

    }        
}
java mysql jdbc properties nullpointerexception
4个回答
2
投票

config.properties 不在类路径下。它应该在classes文件夹下。

你也可以尝试一下

Database.class.getClassLoader().getResourceAsStream(
                "com/lk/apiit/eduservice/config.properties");

正如 Roman C 指出的,你还需要首先初始化 Properties 对象

Properties property = new Properties();

2
投票

您忘记初始化

Properties property = new Properties();

这是代码中

NullPointerException
的问题,因为您引用了未初始化的变量。

如果您打开一个流,则应在不使用它后将其关闭。通过添加

finally
块来完成。

获取数据库连接的代码可以移至相应的方法。如果连接关闭,您将不会再次重新初始化数据库,只需重新打开连接或获取新连接。


1
投票

不要将配置属性文件保存在包中。将其直接保留在源文件夹中,以便在构建完成后配置属性文件直接出现在 build/classes 文件夹中。

问题是您的配置属性位于文件夹 com/ik/apiit/eduservice 文件夹中,但您的代码期望它直接位于类文件夹(类路径的根文件夹)中。


0
投票

试试这个

FileInputStream in = new FileInputStream(System.getProperty("WEB-INF/dbConnection.properties"));

prop.load(in);

© www.soinside.com 2019 - 2024. All rights reserved.