有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java单机应用中静态连接对象mysql的缺点

我对Java还是一个新手,当时正在使用GUI builder学习一些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应用程序中,不必反复重复相同的代码,获得连接的最佳方式是什么

谢谢!


共 (1) 个答案

  1. # 1 楼答案

    通常的方法是连接池

    静态连接对象存在问题:

    • 每个用户会话保持一个连接。对于许多用户,这会显著增加DB服务器上的负载(或者许可证成本,如果有的话)
    • 如果连接中断或超时,则无法重新建立连接

    每次打开连接都很慢

    连接池可以保持合理数量的打开连接,知道如何替换那些由于错误而断开的连接,并且可以非常快地为您提供连接并将其恢复

    JDBC有几种连接池的实现