Java Singleton是公共静态的,但不可访问
我目前正在编写一个三层体系结构的银行应用程序,作为一个学生项目。 当我理解Dao模式时,我实现了它,并希望处理与它的数据库交互,但实际上我不能,因为我的Dao类不能访问数据库singleton getInstanceDB。dao类是一个接口的实现。这些类都在同一个包中。 这似乎是一个可视性问题,因为Singleton在除自身之外的任何其他类中都不可调用。 这是代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Database {
private static Database instance;
private Connection conn;
private Statement stmt;
private Database() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@oracle.leuphana.de:1521:oradb1", "...", "...");
stmt = conn.createStatement();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
// Thread-Safe Singleton
public static synchronized Database getInstanceDB() {
if (instance == null) {
instance = new Database();
}
return instance;
}
}
// Select Data by CustomerID
@Override
public ResultSet select(Kunde kunde) {
if (kunde == null)
throw new IllegalArgumentException("given id is null");
if (kunde.getId() < 0)
throw new IllegalArgumentException("given id has an invalid value");
String query = "SELECT * FROM customer WHERE customer_id=" + Integer.toString(kunde.getId());
ResultSet rs = null;
try {
Connection conn = getInstanceDB().getConnection();
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(query);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
我是stackoverflow的新手,我希望这个帖子可以,如果你需要更多信息,尽管问我^^
编辑: 错误:未为KundeDao类型定义getInstanceDao()方法 getConnection()看到答案了吗,除了catch部分外,其他都是一样的
谢谢你快速而有用的回答
# 1 楼答案
我觉得你的逻辑有点错误。试试这样
然后创建数据库实例并像这样调用getConnection()方法
注意:要打开关闭的连接,您应该使用
try-with-resources
以获得更方便的方法