我写了一个Singleton类来获取连接。但是,我无法使用Singleton获得连接。
我想使用我的Singleton获取多个连接并使用Singleton连接查询数据库。我总是尝试几种方法,但没有成功。
这是我的Singleton类:
import java.sql.*;
public class ConnectDB {
private static Connection connect;
private static ConnectDB instance;
private ConnectDB()
{
try {
Class.forName("com.mysql.jdbc.Driver");
//connect DB
connect = DriverManager.getConnection("jdbc:mysql://ip/database","root","password");
}
catch(SQLException e)
{
System.err.println(e.getMessage());
}
catch(ClassNotFoundException e)
{
System.err.println(e.getMessage());
}
}
public static ConnectDB getInstance()
{
if(instance == null) {
instance = new ConnectDB();
}
return instance;
}
}
现在,我得到了连接:
public class NameClass {
public void getInfoDatabase()
{
Connection cnn = ConnectDB.getConnection();
PreparedStatement ps;
ResultSet rs;
try {
ps = cnn.prepareStatement("select * from tables");
rs = ps.executeQuery();
while(rs.next())
{
String tables = rs.getString("table1");
System.out.println(tables);
}
答案 0 :(得分:9)
如果您想有效地使用多个连接,可能需要connection pool:
在软件工程中,连接池是数据库的缓存 保持连接,以便在连接时可以重用连接 将来对数据库的请求是必需的。连接池是 用于增强在数据库上执行命令的性能。
让Singleton
返回许多连接会违反Singleton
的目的,{{1}}的任务是在调用时提供相同的实例。
我建议你看看this之前的SO线程,其中讨论了各种连接池库。
答案 1 :(得分:0)
最好有一个单独类的连接池,如ComboPooledDataSource,然后从中获得多个连接。
答案 2 :(得分:0)
我的方式是这个DBConnection是一个Singleton类。这个用法在ContactDAO类中。
NaN
********* ContactDAO *************
public class DBConnection{
private static DBConnection instance;
private String url="jdbc:oracle:thin:@192.168.10.32:1521:orcl";
private String login="kit";
private String pass="1234";
private DBConnection(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
if (instance == null) {
instance = new DBConnection();
System.out.println(" Connection - - - - - - - - New DBConnection created");
}
try {
return DriverManager.getConnection(instance.url, instance.login,instance.pass);
} catch (SQLException e) {
throw e;
}
}
public static void close(Connection connection)
{
try {
if (connection != null) {
connection.close();
connection=null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}