注意:我们在使用有参的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();
} } }

最新文章

  1. 《sqoop实现hdfs中的数据导出至mysql数据库》
  2. [家里蹲大学数学杂志]第056期Tikhonov 泛函的变分
  3. 项目管理工具:Maven使用方法总结
  4. 消息中间件MQ基础理论知识
  5. Servlet基础之一:Servlet基本接口与类
  6. paip.navicat form mysql导入文本文件时CPU占用100%的解决
  7. 一个Cmake的例子
  8. 201521123051《java程序设计》 第一周学习总结
  9. ubuntu中使用usb-creator制作live usb
  10. Python startswith()方法
  11. Java 异常与反射 总结
  12. 眼底血管分割训练函数(SVM,Adaboost)
  13. wcf事务
  14. winform连接oracle时Oracle.DataAccess.dll版本问题 Silverlight
  15. linux内核添加模块
  16. rpm方式安装MySQL5.1.73
  17. c# 之系统环境安装
  18. Java NIO -2
  19. Hive学习笔记:基础语法
  20. luoguP4568 [JLOI2011]飞行路线

热门文章

  1. python Django html 一对多数据实例 模态对话框添加数据
  2. 算警示吧——此文来自张鑫旭(说说CSS学习中的瓶颈)
  3. 五种常用web服务器jvm参数设置
  4. Windows7设置锁屏密码
  5. java实现Kafka的消费者示例
  6. 直到黎明 Until Dawn 后感
  7. 游戏攻略 Re:LieF ~親愛なるあなたへ~ (relief给挚爱的你)
  8. centos 安装golang笔记
  9. Ext根据条件显示隐藏列
  10. Datastage重启服务