package it.cast.jdbc;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList; public class MyDataSource { private static String url = "jdbc:mysql://localhost:3306/jdbc";
private static String username = "root";
private static String password = "123"; private static int initCount = 5;
private static int maxCount = 10;
private int currentCount = 0; private LinkedList<Connection> connectionPool = new LinkedList<Connection>(); public MyDataSource() {
try {
for (int i = 0; i < initCount; i++) { this.connectionPool.addLast(this.createConnection()); this.currentCount++;
}
} catch (SQLException e) {
throw new ExceptionInInitializerError(e);
} } public Connection getConnection() throws SQLException {
synchronized (connectionPool) {
if (this.connectionPool.size() > 0) {
return this.connectionPool.removeFirst();
}
if (this.currentCount < maxCount) {
this.currentCount++;
return this.createConnection();
}
throw new SQLException("NO Connection!!");
} } public void free(Connection conn) {
this.connectionPool.addLast(conn);
} private Connection createConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
}

MyDataSource

 package it.cast.jdbc;

 import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class jdbcUtils { private static String url = "jdbc:mysql://localhost:3306/jdbc?generateSimpleParameterMetadata=true";
private static String user = "root";
private static String password = "123"; private static MyDataSource myDataSource = null; private jdbcUtils() { } static {
try {
Class.forName("com.mysql.jdbc.Driver");
myDataSource =new MyDataSource();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} public static Connection getConnection() throws SQLException {
return myDataSource.getConnection();
} public static void free(ResultSet rs, Statement st, Connection conn) { try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally { try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally { try {
if (conn != null)
//conn.close();
myDataSource.free(conn);
} catch (Exception e) {
e.printStackTrace();
}
} } } public static void free(ResultSet rs, PreparedStatement ps, Connection conn) { try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally { try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
} finally { try {
if (conn != null)
//conn.close();
myDataSource.free(conn);
} catch (Exception e) {
e.printStackTrace();
}
} } }
public static void free(ResultSet rs, CallableStatement cs, Connection conn) { try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally { try {
if (cs != null)
cs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally { try {
if (conn != null)
//conn.close();
myDataSource.free(conn);
} catch (Exception e) {
e.printStackTrace();
}
} } }
}

jdbcUtils

 package it.cast.jdbc;

 import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class Base { static Connection conn = null; public static void main(String[] args) throws SQLException, ClassNotFoundException {
for (int i = 0; i < 20; i++) {
Connection conn = jdbcUtils.getConnection();
System.out.println(conn);
//jdbcUtils.free(null, null, conn);
}
} static void test() throws SQLException, ClassNotFoundException { // 2.建立连接
conn = jdbcUtils.getConnection(); // 3.创建语句
Statement st = conn.createStatement(); // 4.执行语句
ResultSet rs = st.executeQuery("select * from user"); // 5.处理结果
while (rs.next()) {
System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t"
+ rs.getObject(3)+"\t" + rs.getObject(4));
} //6.释放资源
jdbcUtils.free(rs, st, conn);
} }

Base

编写一个基本的连接池来实现连接的复用&一些工程细节上的优化的更多相关文章

  1. 关于 Mybatis的原生连接池 和 DBCP 连接池

    一 遇到的问题:  项目用的play框架,数据库DB2, 持久化框架是Mybatis, 连接池用的是Mybatis原生的,遇到的问题是:有时候抛出如下异常: play.api.UnexpectedEx ...

  2. Redisclient连接方式Hiredis简单封装使用,连接池、屏蔽连接细节

    工作须要对Hiredis进行了简单封装,实现功能: 1.API进行统一,对外仅仅提供一个接口. 2.屏蔽上层应用对连接的细节处理: 3.底层採用队列的方式保持连接池,保存连接会话. 4.重连时採用时间 ...

  3. JDBC秒变C3P0连接池——再加连接解耦

    从JDBC连接到C3P0数据库连接池 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ② ...

  4. Swoole 中使用 PDO 连接池、Redis 连接池、Mysqli 连接池

    连接池使用说明 所有连接池的实现均基于 ConnectionPool 原始连接池: 连接池的底层原理是基于 Channel 的自动调度: 开发者需要自己保证归还的连接是可重用的: 若连接不可重用,需要 ...

  5. JDBC连接池(三)DBCP连接池

    JDBC连接池(三)DBCP连接池 在前面的随笔中提到 了  1.JDBC自定义连接池  2. C3P0连接池 今天将介绍DBCP连接池 第一步要导入jar包   (注意:mysql和mysql 驱动 ...

  6. DBCP连接池与c3p0连接池

    1.   DBCP连接池

  7. 采用DBCP连接池技术管理连接

    DBCP的使用步骤步骤一:导包,使用第三方的道具,必须导入相应的jar包. 一般需要导入两个jar包: -commons-dbcp-1.x.jar包 -commons-pool-1.x.x.jar包 ...

  8. JDBC连接池一 自定义连接池

    package com.mozq.jdbc; import java.io.IOException; import java.io.InputStream; import java.sql.Conne ...

  9. getSessionFactory().openSession()导致druid连接池中的连接都占用满但无法回收

    该问题产生的现象 页面刷新几次后,就卡住,线上就得需要重新部署(还好是测试环境,不是真正生产环境) 过程及原因 查看日志线程池满了 Caused by: org.springframework.jdb ...

随机推荐

  1. CentOS 7.2安装docker-compose运行gitlib

    服务器已经安装好docker 启动: service start docker 安装docker-compose: 安装pip:sudo yum search pip  / sudo yum inst ...

  2. java网络编程2

    在通信双方中,ServerSocket是服务器端负责接收的一方,它负责监听指定端口,其构造函数如下: 1.ServerSocket()  throws IOException;无参构造函数,之所以存在 ...

  3. 一场IT民工 与 人贩子 之间的战争 - 感受来自PostgreSQL的爱

    标签 PostgreSQL , 图数据库 , 社会关系分析 , 流式分析 , 人贩子 , 图像识别 , 人脸识别 , 公安刑侦 , pipelinedb , stream , neo4j , plpr ...

  4. 展开easyui 树节点到某个点

    $(function () { $('#tt').tree({ url: '/IS/Department/JsonTree?companyID=@(Request.QueryString[" ...

  5. Entity Framework 通过Lambda表达式更新指定的字段

    本来需要EF来更新指定的字段,后来在园子里找到了代码 var StateEntry = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectS ...

  6. dedecms为文档页增加动态点击

    加上 <script src="{dede:field name='phpurl'/}/count.php?view=yes&aid={dede:field name='id' ...

  7. 16-01-25---Servlet复习笔记(01)

    Servlet ServletAPI中有4个java包    javax.servlet 包含Servlet与Servlet容器之间契约的类和接口    javax.servlet.http 包含HT ...

  8. __autoload()尝试加载未定义的类

    在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.PHP5 以后提供了这样一个方法可以自动完成加载所需的类文件. 参见官网的例子: ./myClass. ...

  9. 0421 & SX2016

    山西省选...这个省...不算强吧...然而就是这么腊鸡题目还是wa得一无是处...怎么办啊怎么办啊...无处拯救青春和未来啊... T1: POI2004原题 BZOJ1524 n<=16.这 ...

  10. ubuntu server 搭建自己的个人博客及其他网站

    一, 安装apache2服务器 sudo apt-get install apache2 二,安装mysql服务器 sudo apt-get install mysql-server 此时会提示输入M ...