自定义连接池DataSourse
自定义连接池DataSourse
连接池概述:
管理数据库的连接,
作用:
提高项目的性能.就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.所有的连接池必须实现一个接口 javax.sql.DataSource接口
获取连接方法:
Connection getConnection()
归还连接的方法就是以前的释放资源的方法.调用connection.close();
常用连接池:
DBCP、C3P0
自定义连接池:
1.创建一个DataSourse项目
2.新建一个包,com.dbcp.hjh;包下新建一个java类DataSourseTest.java
3.创建一个工具包com.util.hjh,放工具类JDBCUtil.java
4.导入jar包mysql-connection-java-5.1.47.jar;记得导入后bulidPath以下
工具类JDBCUtil.java代码:
package com.util.hjh; 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 JDBCUtil {
final static String driver = "com.mysql.jdbc.Driver";
final static String url = "jdbc:mysql://localhost/hejh?useUnicode=true&characterEncoding=UTF-8";
final static String user = "root";
final static String password = "root"; Connection conn = null;
PreparedStatement ps = null;
Statement st = null;
ResultSet rs = null; /**获取连接*/
public static Connection getConnection() throws SQLException {
Connection conn = null;
try {
//注册驱动
Class.forName(driver);
//获取连接
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
} /**关闭资源closeResourse(conn,st)*/
public static void closeResourse(Connection conn,Statement st) {
try {
if(st!=null) {
st.close();
}else {
st = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null) {
conn.close();
}else {
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**关闭资源closeResourse(conn,ps)*/
public static void closeResourse(Connection conn,PreparedStatement ps) {
try {
if(ps!=null) {
ps.close();
}else {
ps = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null) {
conn.close();
}else {
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**关闭资源closeResourse(rs)*/
public static void closeResourse(ResultSet rs) {
try {
if(rs!=null) {
rs.close();
}else {
rs = null;
}
} catch (SQLException e) {
e.printStackTrace();
}finally { }
}
}
DataSourseTest.java代码:
package com.dbcp.hjh; import java.sql.Connection;
import java.sql.SQLException;
import java.util.LinkedList;
import com.util.hjh.JDBCUtil; //自定义连接池
public class DataSourseTest { static LinkedList<Connection> pool = new LinkedList<>();//定义一个连接池
//初始化时,放入三个连接
static {
for(int i=0;i<3;i++) {
try {
Connection conn = JDBCUtil.getConnection();
pool.add(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
} //从连接池中获取连接
public static Connection getConnection() {
//获取连接之前需判断是否为空
if(pool.isEmpty()) {
//如果连接池为空,新建2个连接
for(int i=0;i<2;i++) {
try {
Connection conn = JDBCUtil.getConnection();
pool.add(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return pool.removeFirst();
} //归还连接
public static void backConn(Connection conn) {
//将conn放入到list的最后面即可
pool.addLast(conn);
System.out.println("归还连接啦");
} public static void main(String[] args) {
//创建连接池
DataSourseTest ds = new DataSourseTest();
//获取连接
Connection conn = ds.getConnection();
System.out.println("即将获取一个连接:");
System.out.println(conn);
//归还连接,不做其他操作
ds.backConn(conn);
}
}
eclipse中console输出:
即将获取一个连接:
com.mysql.jdbc.JDBC4Connection@8de145
归还连接啦
自定义连接池DataSourse的更多相关文章
- JDBC连接池-自定义连接池
JDBC连接池 java JDBC连接中用到Connection 在每次对数据进行增删查改 都要 开启 .关闭 ,在实例开发项目中 ,浪费了很大的资源 ,以下是之前连接JDBC的案例 pack ...
- java自定义连接池
1.java自定义连接池 1.1连接池的概念: 实际开发中"获取连接"或“释放资源”是非常消耗系统资源的两个过程,为了姐姐此类性能问题,通常情况我们采用连接池技术来贡献连接Conn ...
- JDBC连接池原理、自定义连接池代码实现
首先自己实现一个简单的连接池: 数据准备: CREATE DATABASE mybase; USE mybase; CREATE TABLE users( uid INT PRIMARY KEY AU ...
- JDBC自定义连接池
开发中,"获得连接"和"释放资源"是非常消耗系统资源的,为了解决此类性能问题可以采用连接池技术来共享连接Connection. 1.概述 用池来管理Connec ...
- MySQL学习(六)——自定义连接池
1.连接池概念 用池来管理Connection,这样可以重复使用Connection.有了池,我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Connect ...
- SpringBoot 整合mongoDB并自定义连接池
SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...
- JAVA自定义连接池原理设计(一)
一,概述 本人认为在开发过程中,需要挑战更高的阶段和更优的代码,虽然在真正开发工作中,代码质量和按时交付项目功能相比总是无足轻重.但是个人认为开发是一条任重而道远的路.现在本人在网上找到一个自定义连接 ...
- JDBC连接池一 自定义连接池
package com.mozq.jdbc; import java.io.IOException; import java.io.InputStream; import java.sql.Conne ...
- day18 15.自定义连接池
我们写的是连接池吗?Connection对象绝对不能关.现在写的玩意不是连接池.因为现在讲的是JDBC,连接池也是JDBC里面的,人家那是SUN公司定义的标准.标准,你那不是标准.既然是标准,你做连接 ...
随机推荐
- centos7 盘符变动 绑定槽位
服务器下的硬盘主有机械硬盘.固态硬盘以及raid阵列,通常内核分配盘符的顺序是/dev/sda./dev/sdb… ….在系统启动过程中,内核会按照扫描到硬盘的顺序分配盘符(先分配直通的,再分配阵列) ...
- Python学习之--数字转人民币读法(解决问题的方法很重要)
效果图: 实现代码: money = float(input("Please input the money:"))cop = int(money)Num = ['零','壹',' ...
- SQL Server分页查询进化史
分页查询一直SQL Server的一个硬伤,就是是经过一些进化,比起MySql的limit还是有一些差距. 一.条件过滤(适应用所有版本) 条件过滤的方法有很多,而思路就是利用集合的差集选择出目标集合 ...
- TZ_16ES6学习总结
1.块级作用域的引入 在ES6之前,js只有全局作用域和函数作用域,ES6中let关键字为其引入了块级作用域. { var a = 5; let b = 6; } console.log(a); // ...
- nvm与nrm
nvm:切换Node版本 nrm:管理npm包的镜像源 nvm的安装,可以参考官网,windows系统直接https://github.com/coreybutler/nvm-windows/re ...
- WPF 单个模块换肤
xmal: <Window x:Class="wpfSkin.MainWindow" xmlns="http://schemas.microsoft.com/win ...
- OCR Tesseract 识别报 empty page解决办法
图片分辨率太低导致 周边加空白 然后重新操作,就行了
- 查询单表菜单是,sql
START WITH CONNECT BY PRIOR这个语法主要用于查询数据包中的树型结构关系.先看下原始数据时怎么样的吧! 表中第一行1001是1002的父节点,而第二行1002又是1003的父节 ...
- 2018-11-1-WPF-Main-thread-gets-a-deadlock-when-stylus-input-thread-is-waiting-for-the-window-to-clos...
title author date CreateTime categories WPF Main thread gets a deadlock when stylus input thread is ...
- 解决git的the remote end hung up问题_百度经验
使用git更新或提交中途有时出现The remote end hung up unexpectedly的异常,特别是资源库在国外的情况下.此问题可能由网络原因引起. 工具/原料 git 方法/步骤 ...