java - 建立与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;
}
}
解决方案
除了极少数例外,整个程序的单个数据库连接是“正确”的事情。
连接需要花费一些东西。您的所有查询都可以使用该连接。
当然,让“构造函数”执行“连接”。并让“析构函数”“断开连接”。
该类应该是“单例”(或等效的)以避免意外获得两个连接。
您的代码有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 中——对于轻量级应用来说是合理的
- 其他——如果使用敏感(信用卡、医疗保健等)信息并且需要从一个网页转到另一个网页,您需要安全建议。
推荐阅读
- swift - 为什么不满足这个说法?
- java - Java BufferedFileReader 跳过第一行
- git - Subgit导入没有标准布局的根目录
- django - 部署到heroku时不断发生django博客错误
- xaml - 如何在 XAML 中的 Rectangle BoxView 内放置文本
- ruby-on-rails - 搜索方法 Ruby
- python - 在 Seaborn 的散点图中可视化与预期值的距离
- c# - 如何设置允许 Lambda 相互通信和 RDS 的 VPC?
- php - 将 mysql 数据库生成的下拉列表中的值放入表单输入字段
- c# - 正则表达式需要超过 1000 分钟才能完成