java - java中如何避免重复的数据库连接?

标签 java mysql sql jdbc

我有两个类。 C_DB 和 C_Test。

在C_DB中,getConnection()方法返回一个连接。如果我多次调用 getConnection(),它将重新连接到数据库并返回多个连接。

有什么办法可以避免这种情况吗?我想检查连接是否存在,然后返回该连接而不是创建新连接。因此只有 1 个到数据库的连接。

C_DB

public class C_DB {
    Connection con;

    public C_DB() {
        String dbLink = "jdbc:mysql://localhost:3306/database";
        String dbUser = "root";
        String dbPass = "";

        try {
            con = DriverManager.getConnection(dbLink, dbUser, dbPass);
        } catch (SQLException e) {
            throw new IllegalStateException("DB Errors: ", e);
        }
    }

    public Connection getConnection() {
        return con;
    }
}

C_测试

public class C_Test {

    public static void main(String[] args) throws Exception {
        Connection con1 = new C_DB().getConnection(); // new connection
        Connection con2 = new C_DB().getConnection(); // new duplicate connection
        Connection con3 = new C_DB().getConnection(); // new duplicate connection
    }

}

最佳答案

您可以使用连接池并将其最大池大小设置为 1,如@Elliott 在评论中指出的那样,或者您可以实现类似的操作。

public class C_DB {

    private static C_DB instance;

    private Connection con;

    private C_DB() {
        String dbLink = "jdbc:mysql://localhost:3306/database";
        String dbUser = "root";
        String dbPass = "";
        try {
            con = DriverManager.getConnection(dbLink, dbUser, dbPass);
        } catch (SQLException e) {
            throw new IllegalStateException("DB Errors: ", e);
        }
    }

    public static Connection getConnection(){
        if(instance == null){
           instance = new C_DB();
        }
        return instance.con;
    }

}

关于java - java中如何避免重复的数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43164654/

相关文章:

php - 选择计数 (`id` )FROM `table` WHERE merk LIKE '%$searchq%'

mysql - 如果使用 where 条件更改了列的数据类型,如何查找列的记录

mysql - 在 MySQL 中选择多个字段的最佳方法

MySQL:自定义自动生成键(AUTO_INCREMENT/多列索引)

mysql 链接外部资源 : . 压缩一个图片文件

sql - 在 Microsoft SQL Server 中减去两个日期

java - 构造函数方法尝试从子类初始化insatnce变量得到StackOverflowError

java - 使用观察者模式作为通知程序是否与使用 Thread.join 相同?

java - Android应用程序设计帮助,如何控制显示哪个 Activity

java - 抽象 Action lambda