时间:2021-07-01 10:21:17 帮助过:6人阅读
import java.sql.Connection; import java.util.ArrayList; import java.util.List; public class MyJDBCPool { /* 1.定义一个容器 集合 2.初始化连接,并放在池子中。 3.创建一个从容器中获取连接的方法 4.创建一个归还连接的方法。*/ private static List<Connection> pool = new ArrayList<>(); private static int List_size = 3; static { for(int i=0;i<List_size;i++) { Connection conn=null; conn = JDBCTool.getConn(); pool.add(conn); System.out.println("当前存放连接为:"+conn+",当前池子中剩余连接数为:"+pool.size()); } System.out.println("====================="); } //取出一个连接 要判断是否为空 public static Connection getConn() throws NullPointerException{ if(pool.isEmpty()) { System.out.println("请等待"); throw new NullPointerException("已经空了,别拿了"); } Connection conn = pool.remove(0); System.out.println("当前取出的连接为:"+conn+",当前剩余连接数为:"+pool.size()); return conn; } //归还连接 要判断是否为真正的连接 public static void returnConn(Connection conn) { if(conn==null) { System.out.println("你玩我?"); return; } pool.add(conn); System.out.println("当前存入的连接为:"+conn+",当前剩余连接数为:"+pool.size()); } }手动实现连接池第二步
import java.sql.Connection; public class Test1 { public static void main(String[] args) { Connection conn = MyJDBCPool.getConn(); Connection conn1 = MyJDBCPool.getConn(); Connection conn2 = MyJDBCPool.getConn(); MyJDBCPool.returnConn(conn2); MyJDBCPool.returnConn(conn1); MyJDBCPool.returnConn(conn); } }手动连接池的测试
注:这里涉及到一个properties文件,文件内容是key =value形式存在的,先使用类加载器(或输入流)将文件加载进来,然后使用properties对象处理文件,使用get()方法获取内容。
1、导入连接池的步骤
导包 buildpath
配置文件 properties
加载文件流,使用properties处理文件
使用连接池的API读取prop对象,创建连接池
getConnection获取连接
返回连接的引用
2、dbcp连接池 开源连接池,效率高,但安全性不强
工具包下载地址:http://commons.apache.org/proper/commons-pool/download_pool.cgi
http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
导包 commons-dbcp 和commons-pool mysql-connection
配置文件导入*.properties 建议放在src根目录
import java.sql.Connection; import org.apache.commons.dbcp.BasicDataSource; public class Test1{ public static void main(String[] args) throws Exception{ BasicDataSource bds = new BasicDataSource(); // 4个必须设置的属性 bds.setDriverClassName("com.mysql.jdbc.Driver"); bds.setUrl("jdbc:mysql:///db0619"); bds.setUsername("root"); bds.setPassword("root"); //其他属性,都是可选属性 bds.setInitialSize(100); // 初始创建100个连接 bds.setMaxActive(50); // 最大活动数 bds.setMaxIdle(20); // 最大空闲数 bds.setMinIdle(10); // 最小空闲数 bds.setMaxWait(-1); // 最大等待时间 Connection conn = bds.getConnection(); System.out.println(conn); Connection conn2 = bds.getConnection(); System.out.println(conn2); } }手动创建DBCP连接池
import java.io.FileInputStream; import java.io.FileNotFoundException; 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 ds; static{ try { Properties p = new Properties(); InputStream is = new FileInputStream("src/db.properties"); p.load(is); ds = BasicDataSourceFactory.createDataSource(p); } catch (Exception e) { e.printStackTrace(); } } public static DataSource getDataSource(){ return ds; } public static Connection getConnection(){ Connection conn = null; try { conn = ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }使用配置文件自动创建DBCP连接池,工具类
3、c3p0连接池
工具包:https://sourceforge.net/projects/c3p0/
导包 c3p0-0.9.5.2.jar mchange-commons-java... mysql-connection...
配置文件名称:c3p0-config.xml c3p0.properties
import java.sql.Connection; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Test1{ public static void main(String[] args) throws Exception{ ComboPooledDataSource cds = new ComboPooledDataSource(); //4 个基本设置 cds.setDriverClass("com.mysql.jdbc.Driver"); cds.setJdbcUrl("jdbc:mysql:///db0619"); cds.setUser("root"); cds.setPassword("root"); Connection conn = cds.getConnection(); System.out.println(conn); } }手动设置c3p0连接池
import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Util { private static DataSource ds; static{ //ds = new ComboPooledDataSource();//加载src/c3p0-config.xml,并使用配置文件中默认的配置配置<default-config> ds = new ComboPooledDataSource("offcn"); //加载src/c3p0-config.xml,并使用名字为offcn的配置配置 } public static DataSource getDataSource(){ return ds; } public static Connection getConnection(){ Connection conn = null; try { conn= ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } }使用xml文件自动创建c3p0,工具类
4、druid连接池
工具包:
导包:druid-1....jar mysql-connection...
配置文件名称 druid.properties
import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; public class DruidUtils { private static DataSource ds; private static Connection conn; static{ try { InputStream is = MyJDBC.class.getClassLoader().getResourceAsStream("druid.properties"); Properties prop = new Properties(); prop.load(is); ds = DruidDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() { try { conn = ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public static DataSource getDataSource() { return ds; } }使用配置文件自动创建Druid连接池,工具类
数据库连接池
标签:out 载器 https tor stat lib set 设计 opened