连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。即如果有大量用户访问数据库,连接池便可以为每个用户提供连接,用户访问完之后收回连接以备再次使用。
连接池可以极大的改善用户的 Java 应用程序的性能,同时减少全部资源的使用。
c3p0连接池下载地址
在这里我选择用c3p0作为连接池。c3p0可以以下链接进行下载:c3p0下载
初始化连接池
1 | package hellomysql; |
通过这个类,我们就可以创建一个连接池,并从中得到一个连接:
1 | package hellomysql; |
异常:修复时区错误
但我在实际操作时会报异常:java.sql.SQLException: The server time zone value is unrecognized
or represents more than one time zone. You must configure either the server or
JDBC driver (via the serverTimezone configuration property) to use a more
specifc time zone value if you want to utilize time zone support.
为解决此问题,我们要在URL内设置时区为标准世界时间,同时,最好将编码格式设为utf-8以便于中文读取。
我们把链接改为如下样式便可以解决问题:
1 | connector.setURL("jdbc:mysql://localhost:3306/hello_mysql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"); |
指定数据表
在实现DataSource类后,我们再创建一个Connector类,这样就可以在Connector类中指定对应的数据表并获取表头。
1 | package hellomysql; |
这样,我们就可以创建一个Connector类,并为其指定用户名、密码、URL、数据表名:
1 | package hellomysql; |
获取连接
接下来,我们就可以从Connector中返回连接分配给指定用户,用户就可以对数据表进行浏览和增删改查操作,我们再创建一个ConnectionUser用户类:
1 | package hellomysql; |
这样,我们就可以创建很多用户并对数据库进行访问了:
1 | package hellomysql; |
运行效果
效果如下:
1 | D:\software\system\IdeaIU-2019.3.3\jdk\jdk-14\bin\java.exe -javaagent:D:\software\system\IdeaIU-2019.3.3\lib\idea_rt.jar=53693:D:\software\system\IdeaIU-2019.3.3\bin -Dfile.encoding=UTF-8 -classpath D:\programme\java\out\production\java;D:\software\system\mysql-8.0.19-winx64\lib\mysql-connector-java-8.0.19.jar;D:\software\system\mysql-8.0.19-winx64\lib\c3p0-0.9.5.5.jar;D:\software\system\mysql-8.0.19-winx64\lib\mchange-commons-java-0.2.19.jar hellomysql.Main |
经测试,本文中的连接池大概支持20个用户的同时访问,在实际使用中,我们可以修改连接池设置以实现数量更大的用户访问。
此例中用户只实现了查询操作,当然增删改查的函数也可以写到ConnectionUser用户类中,我们还可以建立不同的用户类,分为管理员用户、普通用户等,不同用户中提供不同的操作函数,如管理员可以进行增删改查,普通用户可以查看和添加,游客用户只可以查看等,此处不再实现,因为并不是本文重点。
这就是本文的全部内容。