连接池的三种实现方式

您所在的位置:网站首页 数据库连接池的实现方式有哪些 连接池的三种实现方式

连接池的三种实现方式

2024-07-11 22:17| 来源: 网络整理| 查看: 265

关于连接池:关于数据库的连接过程,我们经常用到的是JDBC技术,一般对于初学者来说都是通过定义一个连接方法和一个释放资源的方法,可是这样的方式存在一个弊端,就是当连接数非常多的时候,我们不断使用连接和关闭,这样比较消耗系统资源,这时候我们就需要引入连接池。

关于连接池的思想是,我们先创建一个池子,之后创建连接存放到池子中去,这时候我们再从池子中直接通过拿取连接来进行使用,使用完之后再归还给池子即可,这样就省去了不断的连接以及释放资源系统的消耗。

连接池的实现:自定义连接池。

//创建一个类,让他实现DataSource接口,注意引入的包在import javax.sql.DataSource;下; public class JDBCDataSource implements DataSource{ //1.创建一个pool池子,用来装一些事先建立的连接,用的时候直接调就行 private static LinkedList pool = new LinkedList(); //2.创建五个连接放到连接池中 static { for(int i=0;i com.mysql.jdbc.Driver jdbc:mysql:///test root 5 20 com.mysql.jdbc.Driver jdbc:mysql:///test root 5 20 package com.test; import java.sql.Connection; import java.sql.SQLException; import javax.management.RuntimeErrorException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Test { //不必编写连接数据库的代码,直接引用DataSource获取数据库的连接对象即可。用于获取操作数据Connection对象。 private static ComboPooledDataSource dataSource = new ComboPooledDataSource("hahaha"); public static DataSource getDataSource() { return dataSource; } public static Connection getConnection() { try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } } import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.sql.DataSource; import org.junit.Test; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JDBCDataSourceTest { @Test public void Test() { Connection conn = null; PreparedStatement ps = null; try { conn = C3P0Test.getConnection(); String sql = "insert into user(name,pwd) values (?,?)"; ps = conn.prepareStatement(sql); ps.setString(1, "嘟嘟3"); ps.setInt(2, 1028); int rs = ps.executeUpdate(); if(rs>0) { System.out.println("插入成功!"); }else { System.out.println("插入失败!"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { DBUtil.release(null, ps, conn); } } }

利用DBCP实现连接池:

配置文件如下书写:db.properties

import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public class DBCPUtil { private static DataSource dataSource; static { InputStream rs = DBCPUtil.class.getClassLoader().getResourceAsStream("db.properties"); Properties prop = new Properties(); try { prop.load(rs); dataSource = BasicDataSourceFactory.createDataSource(prop); } catch (Exception e) { // TODO Auto-generated catch block throw new RuntimeException(e); } } public static DataSource getDataSource() { return dataSource; } public static Connection getConnection() { try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } } import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import org.junit.Test; public class DBCPUtilTest { @Test public void Test01(){ try { Connection conn = null; PreparedStatement prep = null; conn = DBCPUtil.getConnection(); String sql = "update user set name =? where pwd =?"; prep = conn.prepareStatement(sql); prep.setString(1, "liqiang"); prep.setInt(2, 1025); int res = prep.executeUpdate(); if(res>0) { System.out.println("更改成功!"); }else { System.out.println("更改失败!"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3