dbcp最终版本
注意:我们在使用有参的queryrunner的时候,不需要关闭connection和DataSource 这些都queryrunner 都替我们完成。我们不需要关系资源释放。
工具类:
package com.jd.lastVersonJdbc; import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.junit.Test; import javax.sql.DataSource;
import java.util.Properties; public class JdbcUtils { static DataSource getMyDataSource() throws Exception{
Properties prop=new Properties();
prop.load(JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
System.out.println(prop);
BasicDataSource ds=BasicDataSourceFactory.createDataSource(prop);//自动解析properites文件。 ds.setMaxIdle();
ds.setMaxTotal();
ds.setInitialSize();
return ds;
}
}
工厂函数可以直接处理properties文件,但是配置文件需要配置和creatDatasource内设置的属性名字要一致:


需要一一对应否则 无法处理properties文件.
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.147.146/homework_day13
username=test
password=
测试:
package com.jd.lastVersonJdbc; import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler; import javax.sql.DataSource;
import java.lang.reflect.Constructor;
import java.sql.Connection;
import java.util.List;
import java.util.Map; public class testJdbc {
public static void main(String ... args)throws Exception{
BasicDataSource ds= JdbcUtils.getMyDataSource();
Connection con=ds.getConnection();
QueryRunner qr=new QueryRunner(ds);
String sql="select * from system_user";
MapListHandler mp=new MapListHandler();
List<Map<String,Object>> rest=qr.query(sql,mp); for(Map<String,Object> pbj:rest){
System.out.println(pbj.get("username"));
}
con.close();//归还连接池。
}
}
记住在使用完连接的时候,需要归还连接池,因为在通过DataSource获取的connection 是被装饰之后的close方法被重新定义,归还连接池。
二、带事务的jdbc工具:
package jd.com.tool_jdbc; import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory; import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties; public class ds_tool {
private static BasicDataSource ds=null;
private static Connection con=null;
private static ThreadLocal<Connection> threadLocal=new ThreadLocal<>();
public static BasicDataSource getDs(){
try {
InputStream inp= ds_tool.class.getClassLoader().getResourceAsStream("database.properties");
Properties pro=new Properties();
pro.load(inp);
ds=new BasicDataSourceFactory().createDataSource(pro);
ds.setInitialSize();
ds.setMaxTotal();
ds.setMaxIdle();
return ds;
}catch (Exception ex){
throw new RuntimeException("初始化数据库失败"+ex);
} }
//给当前线程绑定变量。
public static BasicDataSource setDs(){
try {
if(con==null){
ds=getDs();
con=ds.getConnection();
threadLocal.set(con);
}else{
threadLocal.set(con);
}
return ds;
}catch (Exception ex){
ex.printStackTrace();
throw new RuntimeException("初始化错误"+ex);
} }
//开启事务
public static void openEven(){
try {
setDs();
con=threadLocal.get();
con.setAutoCommit(false);
}catch (Exception ex){
ex.printStackTrace();
} }
//提交事务
public static void commEven(){
try {
con=threadLocal.get();
con.commit();
}catch (Exception ex){
ex.printStackTrace();
} }
//回滚事务
public static void rollbackEvent(){
try {
con=threadLocal.get();
System.out.println(con);
con.rollback();
}catch (Exception ex){
ex.printStackTrace();
} }
public static void closedDs(BasicDataSource ds, PreparedStatement pre){
try {
85 ds.close(); 这个不需要关闭。
86 pre.close(); 不需要操作。都是datasource帮忙处理。
threadLocal.remove();
}catch (Exception ex){
ex.printStackTrace();
} } }
dbcp最终版本的更多相关文章
- java24 手写服务器最终版本
手写服务器最终版本; <?xml version="1.0" encoding="UTF-8"?> <web-app> <serv ...
- 微软发布.Net Core 3.0 RC1,最终版本定于9月23日
2019.9.17 微软 宣布推出.NET Core 3.0 Release Candidate 1.就像Preview 9一样,主要专注于为 .NET Core 3.0 发布最终版本 .现在变得非常 ...
- JS---案例:图片跟着鼠标飞的最终版本
案例:图片跟着鼠标飞的最终版本 换了个好看的糖果照片,想给博客首页加上,但是加上后,应该是overwrite原来的html,所以光有鼠标跟着飞的效果,原来的功能都不能用了 放入common.js &l ...
- Windows7 SP1旗舰版精简版最终版本
2016年6月9号,老毛子@lopatkin大神针对Win7 SP1旗舰版精简版进行了最终更新,此次主要是之前小问题的修复和调整.该版为Windows 7 SP1 简体中文旗舰版最新版,包含2016年 ...
- IE6、IE7兼容querySelectorAll和querySelector方法-最终版本
querySelector 和 querySelectorAll 方法是 W3C Selectors API 规范中定义的.他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素.目前几乎主流浏 ...
- TD课程通最终版本体验
功能上,新版本增加了学校教室的上课情况,有无课程可以清楚查询,如下图: 在添加课程的设置上有改进,相比于之前编辑课程后不能保存,新版本在可保存的基础上又增加了登陆教务系统的功能,学生使用更加方便快捷, ...
- android 登陆案例_最终版本 sharedpreference
xml 与之前的登陆案例相同 java代码: package com.itheima.login; import java.util.Map; import com.itheima.login.ut ...
- 海南医院帆软报表 最终版本SQL
1. 挂号微信收入明细 -- WANTED-1283 门诊查询统计报表-挂号微信收入明细 select p.name as patientName, -- 患者姓名 p.birthday, -- 出生 ...
- 机房重构——UML图最终版本
刚开始画图时确实很纠结,那时候是在师父的逼迫下不得不画,不过这样也是有好处的,在师父的强烈要求下,我学会了如何使用EA,也对一个学习一个新的软件有了一个更好的方法,可以去找一些视频,或者文字资料来帮助 ...
随机推荐
- java单例模式的心得
由于设计模式对于java高级开发人员来说是非常重要的,网上也有很多关于设计模式的文章,博客等.所以,首先我对相对简单的单例模式做一个简单的总结. 一.实现方式 单例模式的实现方式有3种,分别是饿汉式, ...
- LeetCode CombinationSum
class Solution { public: vector<vector<int> > combinationSum(vector<int> &cand ...
- (利用DOM)在新打开的页面点击关闭当前浏览器窗口
1.在开发过程中我们前端的用户体验中有时候会要求点击一个按钮,关闭当前浏览器窗口.用html DOM就可做到. 2.注意:本次写法要求在新窗口中关闭. target="_blank" ...
- 在php中怎么利用js把参数传递给弹窗
1.在php页面中经常用到把参数传递给弹窗页面,在弹窗页面中操作 2.两种方式,截图为一种 3.最常见的就是利用hideen隐藏域,点击按钮的时候把要传递的参数值传递给隐藏域,需要的时候在弹窗中获取. ...
- 通过读写文本文件小结“关于python处理中文编码的问题”
一.引言 无论学习什么程序语言,字符串这种数据类型总是着有非常重要.然而最近在学习python这门语言,想要显示中文,总是出现各种乱码.于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可 ...
- BZOJ1597: [Usaco2008 Mar]土地购买(dp 斜率优化)
题意 题目链接 Sol 重新看了一遍斜率优化,感觉又有了一些新的认识. 首先把土地按照\((w, h)\)排序,用单调栈处理出每个位置第向左第一个比他大的位置,显然这中间的元素是没用的 设\(f[i] ...
- SQL Server 2017搭建主从备份
SQL Server 2017搭建主从¶ 关于日志传输¶ 和Oracle DG,Mysql主从一样,SQL Server也支持主从的高可用.进一步提高数据的安全性和业务的高可用.通过将主库上的日志传输 ...
- 用localStorage来存储数据的一些经验
localStorage: 是一种你不主动清除它,它会一直将存储数据存储在客户端的存储方式,即使你关闭了客户端(浏览器),属于本地持久层储存 sessionStorage: 用于本地存储一个会话(se ...
- Spring Boot—20Zookeeper
https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/ pom.xml <dependency&g ...
- Week6——Lifecycle of JSF and Facelets
一.JSF生命周期 JSF是基于事件驱动.JSF生命周期分为两个主要阶段:执行阶段和渲染阶段. 1.执行阶段 分为六个阶段: 恢复视图阶段 当客户端请求一个JavaServer Faces页面时,Ja ...