Java-自定义简单的mysql数据库连接池

    当我们在使用java连接数据库的时候,要注册驱动,.再通过"驱动管理器"获取连接对象(Connection),当我们的程序被很多用户访问的时候,每次都创建一个Connection连接对 象的时候,程序会变得特别卡,这时候我们可以通过数据库连接池来解决这个问题。

  用连接池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调 用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。

  常用的连接池:
          1).DBCP连接池:Apache公司的免费、开源的连接池实现。Apache公司的Tomcat服务器内部就是采用的DBCP连接池。
          2).C3P0连接池:免费、开源的。在长时间运行的情况下,C3P0内部的资源释放方面的功能要比DBCP要强大。世界主流框架:Spring框架、Hibernate框架内部
     采用的就是C3P0连接池。

  按照这个原理,我自己写了一个简易的数据库连接池,考虑的不是很周全,仅供参考,有兴趣的朋友可以定义一个逻辑更加严谨的连接池。

  首先写一个配置文件,将连接数据库的信息写入配置文件:

  

1 driverClassName=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/student
3 username=root
4 password=123456

  自定义数据库连接池代码:

 1 package connectionpool;
 2
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 import java.util.LinkedList;
 7 import java.util.Properties;
 8
 9 import javax.sql.DataSource;
10
11 //创建一个自定义数据库连接池;
12 public class JDBCPool{
13     //通过LinkedList集合来存储Connection对象,用来模拟onnection对象的重复利用过程;
14     //初始化connection对象的个数;
15     //定义最大的连接对象;
16     //定义连接池最少需要留取的对象
17     private static LinkedList<Connection> link;
18     private static Properties p;
19     private static int initCount=5;
20     private static int maxCount=10;
21     private static int minCount=1;
22     //通过静态代码块来实现注册驱动;
23     static{
24          p= new Properties();
25         try {
26             p.load(JDBCPool.class.getClassLoader().getResourceAsStream("dpconfig.properties"));
27             Class.forName(p.getProperty("driverClassName"));
28             link = new LinkedList<Connection>();
29         } catch (Exception e) {
30             throw new RuntimeException();
31         }
32
33     }
34     //通过构造方法来实现初始化的Connection对象的个数;
35     //我这里是初始化的Connection对象是5个;
36     public JDBCPool(){
37         for (int i = 0; i <initCount; i++) {
38             try {
39                 this.link.addFirst(this.createConnection());
40             } catch (SQLException e) {
41
42                 e.printStackTrace();
43             }
44         }
45     }
46     //创建Connection对象的方法,如果大于最小的创建好的Connection对象,就直接取出去;
47     //如果没有的话,就判断是否到达最大的连接数,没到达的话,就创建一个;
48     //我没有对不满足两种情况进行处理,有兴趣的朋友可以尝试一下;
49     private Connection getConnetion(){
50         synchronized(link){if(link.size()>minCount){
51             return link.removeFirst();
52         }if(link.size()<maxCount){
53             try {
54                 return this.createConnection();
55             } catch (SQLException e) {
56
57                 e.printStackTrace();
58             }
59         }
60         return null;
61         }
62     }
63     //用来创建Connection对象的
64     public Connection createConnection() throws SQLException{
65         return DriverManager.getConnection(p.getProperty("url"),p.getProperty("username"),p.getProperty("password"));
66     }
67     //回收时是将Connection取回到集合,并不是关闭
68     public void free(Connection conn){
69         this.link.addLast(conn);
70     }
71 }

  

时间: 2024-12-25 03:48:29

Java-自定义简单的mysql数据库连接池的相关文章

Java利用Eclipse和Mysql数据库连接并存储图片——取出图片

通过流和JPEGCodec.JPEGImageEncoder类的操作来取出数据库中的图片. 注释很详细,注意要额外的引入mysql的驱动包,要修改数据库的用户名和密码以及URL.希望对大家有帮助. import java.awt.image.BufferedImage; import java.io.*; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql

Java利用Eclipse和Mysql数据库连接并存储图片——存储图片

import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class insertImage {  public static void main(String[]args) throws Ex

第77节:Java中的事务和数据库连接池和DBUtiles

前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许多个单一的逻辑,只要有一个逻辑没有执行成功就算失败,导致回滚就是指所有的数据都会回到最初的状态. 有事务,是为了保证逻辑一定要成功,如银行转账. 回顾一下 什么是jsp,jsp的三大指令. page: 定义当前页面的信息 include: 包含其他页面 taglib: 引入标签库 三大动作标签: <jsp:forward page="">

MySql数据库连接池

1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的桥梁,即无发送到SQL命令到数据库端执行  (3).项目中,对于Connection不说,不会直接使用DriverManager取得,而使用连接池方式. 2.采用连接池(示意图) 3.开源数据库连接池 (1).现在很多Web服务器(Weblogic, WebSphere, Tomcat)都提供了Da

Python实现Mysql数据库连接池

python连接Mysql数据库: Python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接MySQL数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因此,实际使用中,通常会使用数据库的连接池技术,来访问数据库达到资源复用的目的. python的数据库连接池包 DBUtils: DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装.DBUtils来

JDBC java数据连接 读取properties 数据库连接池 预编译

1.创建连接,下载MySQL驱动(JDBC接口的实现类,就是一个jar包) public class Demo01 { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1. 注册驱动 告诉虚拟机使用的是哪个数据库软件 Class.forName("com.mysql.jdbc.Driver"); //2. 获取连接对象 Connection conn = Dri

MySql 数据库连接池

最近发布的一个项目总是无缘无故的断线,在IIS机器上直接浏览也不会出现黄页面,就是一直加载,最后断线. 重启IIS后恢复正常. 经过几次后,查看了IIS日志和WINDOWS日志,在WINDOWS日志中发现错误信息如下: <Data>error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred b

Mysql数据库连接池知识分享

使用优点: 连接池最大的优点是性能.创建一个新的数据库连接是一个耗时耗资源的一个过程.而使用了连接池之后,连接请求可以直接通过连接池来提供而不需要重新连接.认证.这样就节省了时间. 使用缺点: 连接池中可能会存在着多个没有被使用一直连接着的数据库,这意味着资源的浪费. 基本原理: 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户调用数据库操作类MySqlConnection的Open()方法时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象.使用完

Java Spring用properties配置数据库连接池出现错误的处理方法[图]

错误 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 17 in XML document from class path resource [db-config.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 17; columnNumber: 78; cvc-complex-ty