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,也对一个学习一个新的软件有了一个更好的方法,可以去找一些视频,或者文字资料来帮助 ...
随机推荐
- 12:计算2的N次方
12:计算2的N次方 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 任意给定一个正整数N(N<=100),计算2的n次方的值. 输入 输入一个正整数N ...
- javascript之for循环的几种写法
背景 javascript中的for循环选择多种多样,可你知道其中的差别在哪里吗?什么时候又该用哪种循环才是最佳策略?以上这些是本文想讨论的,欢迎交流. 说明 1.20年前的for循环 //20年前的 ...
- P/Invoke出现错误 System.NullReferenceException”类型的未经处理的异常在 未知模块。 中发生 未将对象引用设置到对象的实例。
问题 “System.NullReferenceException”类型的未经处理的异常在 未知模块. 中发生 未将对象引用设置到对象的实例. 解决方案 1.尝试 用管理员身份运行CMD,输入nets ...
- Drupal8入门文章推荐
1.<drupal 8 入门 > 2.<初探drupal8>
- C#基础 继承和实例化
有代码如下,问输出的是多少: class Program { static void Main(string[] args) { B b = new B(); Console.ReadKey(); } ...
- 前端模块化方案全解(CommonJS/AMD/CMD/ES6)
模块化的开发方式可以提高代码复用率,方便进行代码的管理.通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数.目前流行的js模块化规范有CommonJS.AMD.CMD以及ES6的模块 ...
- CSS 小结笔记之元素的隐藏与显示
在网站上经常会有一些需要一定操作才会显示或隐藏的元素,这时会用到元素的隐藏与显示.主要通过以下三种属性实现. 1.display :none|block |inline |inline-block d ...
- springMVC结合AjaxForm上传文件
最近在项目中需要上传文件文件,之前一直都是form提交的,尝试了一下AjaxForm,感觉还比较好用,写篇随笔mark下,供以后使用. 准备工作: 下载jquery-form.js 相关jar: co ...
- Maven环境变量配置和在Eclipse中的配置
1.Maven环境变量配置 M2_HOME :变量值为maven的安装目录 在path后添加%M2_HOME%\bin; 检查JDK,maven配置的cmd命令 echo %JAVA_HOME% ja ...
- 洛谷P1064 金明的预算方案
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...