Java独立应用程序中静态Connection对象的缺点

use*_*252 1 java mysql jdbc

我仍然是Java的新手,并且正在使用GUI构建器来学习Java的OO和其他编程概念.

我创建了一个非常基本的银行系统,基本上客户可以存钱和取钱.

我的代码没有特别的问题,因为一切正常,我只是有关于数据库连接的问题.

由于始终重复创建连接的代码,因此我创建了一个数据库类,如下所示:

public class DB {
    static Connection c;

    public static void createConnection() throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        DB.c = DriverManager.getConnection("jdbc:mysql://localhost:3306/bank", "root", "");
    }

    public static int insertUpdateDelete(String sql) throws Exception{
        if(c == null){
            createConnection();
        }
        return c.createStatement().executeUpdate(sql);
    }

    public static ResultSet search(String sql) throws Exception{
        if(c == null)
            createConnection();
        return c.createStatement().executeQuery(sql);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我想从数据库插入/更新/删除时,我就是这么做的:

DB.insertUpdateDelete(SQL); //SQL contains the query
Run Code Online (Sandbox Code Playgroud)

对于搜索,我会这样做:

ResultSet rs = DB.search(SQL);
Run Code Online (Sandbox Code Playgroud)

经过一些阅读后,我了解到由于"资源泄漏"和查询相互干扰,拥有静态连接对象并不是最佳实践.

我的问题是,在独立的Java应用程序中获取连接的最佳方法是什么,而不必一遍又一遍地重复相同的代码.

谢谢

900*_*000 5

通常的方法是连接池.

静态连接对象有问题:

  • 您保持每个用户会话的连接.对于许多用户来说,它显着增加了数据库服务器上的负载(或许可证的许可证成本).
  • 如果连接中断或超时,则无法重新建立连接.

每次打开连接都很慢.

连接池保持合理数量的打开连接,知道如何替换因错误而断开连接的连接,并且可以为您提供连接,并且可以非常快速地将其取回.

JDBC有几种连接池实现.