我需要在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;
}
}
答案 0 :(得分:2)
config.properties不在classpath下。它应该在classes文件夹下。
您也可以尝试
Database.class.getClassLoader().getResourceAsStream(
"com/lk/apiit/eduservice/config.properties");
正如Roman C所指出的,你还需要首先初始化属性对象
Properties property = new Properties();
答案 1 :(得分:2)
您忘了初始化
Properties property = new Properties();
这是代码中NullPointerException
的问题,因为您引用了未初始化的变量。
如果您打开一个流,则应在不使用后将其关闭。通过添加finally
块来实现。
您获得与数据库的连接的代码,您可以移动到相应的方法。如果连接已关闭,则不会再次重新初始化数据库,只需重新打开连接或获取新连接即可。
答案 2 :(得分:1)
不要在包中保留配置属性文件。将它直接保存在源文件夹中,以便在构建完成后,config属性文件直接出现在build / classes文件夹中。
问题是您的配置属性位于com / ik / apiit / eduservice文件夹中,但您的代码希望它直接位于classes文件夹(类路径的根文件夹)中。
答案 3 :(得分:0)
试试这个
FileInputStream in = new FileInputStream(System.getProperty(“WEB-INF / dbConnection.properties”));
prop.load(IN);