我有一个主类、一个登录类和一个gui类。
在我的main中,我使用Singleton模式创建了一个数据库连接——这个连接只有一个实例。
我想从登录时访问数据库连接,以在登录系统时验证用户。
我在main中的连接方法:
/**
* Use the Singleton pattern to create one Connection
*/
private static Connection getConnection() {
if (conn != null) {
return conn;
}
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage() + " load driver error");
System.exit(0);
}
try {
//conn = DriverManager.getConnection(host);
conn = DriverManager.getConnection(host + "create=true", dbUsername, dbPassword);
} catch (SQLException e) {
displayErr("Get connection error: ", e);
System.exit(0);
}
return conn;
}
现在,我想创建一个登录方法,在那里我需要使用连接conn。该方法是静态的,我不能使用conn。
我确信这是错误的,但我也尝试过创建一个返回连接conn的公共方法,然后尝试从Main调用该方法。
conn = Main.returnConnection();
在这种情况下我该怎么办?我很困惑我应该如何建模。
与连接池相比,您的方法非常原始连接池是指一个包含缓存的、可重复使用的连接的池,这些连接可以在未来的请求中使用。正如您所说,为每个用户打开连接是一个昂贵的过程,为每个使用者提供静态连接也会发生冲突。连接池是在这种情况下应该使用的标准。
connection = connectionPool.getConnection();
上层代码意味着从池中获取一个连接,如果所有连接都已分配,则机制会自动创建一个新连接。
最受欢迎的库是:
- BoneCP
- Apache DBCP
- C3p0
我发现Singleton模式的目的是创建一个实例,让每个人都能看到它。
因此,我改为将其公开为静态void,现在可以访问该连接,而无需每次都创建新的连接。
如果我错了,请纠正我,但这很好。