首页 > 解决方案 > 建立与mysql数据库的连接(关于优化的问题)

问题描述

我正在实现一个需要与 mysql 数据库建立连接的程序。我目前正在为每个课程独立连接(如注册、登录、显示用户等),使用以下几行:

Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3308/myfirstdb","root");

我在想的是为连接实现一个类并每次调用它的默认构造函数。它是否有任何优点/缺点或无关紧要。这是课程:

public class MyConnection {

    private Connection con;

    public MyConnection() {

        //establishing connection
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3308/myfirstdb","root","");
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }

    //for future use
    public Connection getCon() {
        return con;
    }
}

标签: javamysqlperformanceconnection

解决方案


除了极少数例外,整个程序的单个数据库连接是“正确”的事情。

连接需要花费一些东西。您的所有查询都可以使用该连接。

当然,让“构造函数”执行“连接”。并让“析构函数”“断开连接”。

该类应该是“单例”(或等效的)以避免意外获得两个连接。

您的代码有public MyConnection(),它请求用户创建多个连接。那应该private只调用一次,例如:

public Connection getCon() {
    if (con == NULL) {    // or whatever the syntax is
        MyConnection();   // Here's the _one_ connection
    }
    return con;
}

然后用户调用getCon()以获得一个连接并使用它来执行查询。

注意:如果您的语言有利于多线程,请执行以下操作之一:

  • 仅从一个线程执行数据库操作,或
  • 每个线程(最多)一个连接。

PS:我相信这个建议适用于任何 OO 语言。

作为一个脚注,建立两个连接以试图获得额外的性能可能是徒劳的。或者,至少,不值得努力。

另一件需要注意的事情...... HTTP 主要是无状态的。因此,如果您有一个要“注册”的网页,那么它会来来去去——一个带有一定数量 SQL 的连接,然后它就会消失。另一个要“登录”的网页将涉及另一个 HTTP 请求、另一个连接等。

之后,用户“登录”的内存需要保存在某个地方:

  • 在 URL 参数中 - 受到黑客攻击
  • 在 cookie 中——对于轻量级应用来说是合理的
  • 其他——如果使用敏感(信用卡、医疗保健等)信息并且需要从一个网页转到另一个网页,您需要安全建议。

推荐阅读