mysql事务scalar_数据库连接池、事务

连接池简介

1、连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。

作用:避免频繁地创建与消毁,给服务器减压力。

2、数据库的弊端:

1.当用户群体少服务器可以支撑,如果群体比较大万级别服务器直接死机。数据库默认的并发访问50.

2.每一个用完数据库之后直接关闭,不能重复利用太浪费资源。

3、设计连接池:

1.在池子中创建出多个连接供使用。

2.当用户需要操作数据库时直接从池子中获取连接即可。

3.当用户使用完毕之后把连接归还给连接池,可以达到重复使用。

4.可以设定池子的最大容器。比如50个连接,当第51个人访问的时候,需要等待。

5.其它用户释放资源的时候,可以使用。

4、手动实现连接池

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importjava.io.IOException;importjava.io.InputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.Properties;public classJDBCTool {private staticConnection conn;private staticString driverName;private staticString username;private staticString url;private staticString password;static{

InputStream is= JDBCTool.class.getClassLoader().getResourceAsStream("qq.properties");

Properties prop= newProperties();try{

prop.load(is);

}catch(IOException e) {

e.printStackTrace();

}

driverName= (String)prop.get("driverClassName");

username= (String)prop.get("username");

url= (String)prop.get("url");

password= (String)prop.get("password");try{

Class.forName(driverName);

}catch(Exception e) {

e.printStackTrace();

}

}public staticConnection getConn() {try{

conn=DriverManager.getConnection(url, username, password);

}catch(SQLException e) {

e.printStackTrace();

}returnconn;

}public static voidclose(Connection conn,PreparedStatement ps,ResultSet rs) {if(conn!=null) {try{

conn.close();

}catch(SQLException e) {

e.printStackTrace();

}

}if(ps!=null) {try{

ps.close();

}catch(SQLException e) {

e.printStackTrace();

}

}if(rs!=null) {try{

rs.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

手动实现连接池第一步

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importjava.sql.Connection;importjava.util.ArrayList;importjava.util.List;public classMyJDBCPool {/*1.定义一个容器 集合

2.初始化连接,并放在池子中。

3.创建一个从容器中获取连接的方法

4.创建一个归还连接的方法。*/

private static List pool = new ArrayList<>();private static int List_size = 3;static{for(int i=0;i

Connection conn=null;

conn=JDBCTool.getConn();

pool.add(conn);

System.out.println("当前存放连接为:"+conn+",当前池子中剩余连接数为:"+pool.size());

}

System.out.println("=====================");

}//取出一个连接 要判断是否为空

public static Connection getConn() throwsNullPointerException{if(pool.isEmpty()) {

System.out.println("请等待");throw new NullPointerException("已经空了,别拿了");

}

Connection conn= pool.remove(0);

System.out.println("当前取出的连接为:"+conn+",当前剩余连接数为:"+pool.size());returnconn;

}//归还连接 要判断是否为真正的连接

public static voidreturnConn(Connection conn) {if(conn==null) {

System.out.println("你玩我?");return;

}

pool.add(conn);

System.out.println("当前存入的连接为:"+conn+",当前剩余连接数为:"+pool.size());

}

}

手动实现连接池第二步

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importjava.sql.Connection;public classTest1 {public static voidmain(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连接池 开源连接池,效率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值