java - Java 独立应用程序中静态连接对象的缺点

标签 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);
    }
}

所以每当我想从数据库中插入/更新/删除时,我都会这样做:

DB.insertUpdateDelete(SQL); //SQL contains the query

对于搜索,我会这样做:

ResultSet rs = DB.search(SQL);

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

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

谢谢

最佳答案

通常的方法是连接池。

静态连接对象有问题:

  • 您为每个用户 session 保持一个连接。对于许多用户,它会显着增加数据库服务器的负载(或您的许可成本,如果有的话)。
  • 如果连接中断或超时,您将无法重新建立它。

每次打开连接都很慢。

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

JDBC 的连接池有几种实现方式。

关于java - Java 独立应用程序中静态连接对象的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194821/

相关文章:

java - 将 Java 中的路径排序为层次结构

java - 我的线程恰好循环了 43 次然后抛出异常

mysql - Postgres JDBC 的表名别名

java - 二叉搜索树中节点的路径作为二叉搜索树

java - 使 JButton 看起来像有输入焦点

php - 使用带有 codeigniter 的下拉菜单更新数据库中的列

mysql - 如何从不同的表中列出多个属性? MySQL

sql - Android MySQL php+JSON 替代方案

java - 将数据库连接存储为单独的类 - Java

eclipse - 如何在 Eclipse web 项目中安装 JDBC 驱动程序而不会遇到 java.lang.ClassNotFoundexception