在java程序中,一般使用jdbc连接数据库,比较麻烦,在看传智教程时学了一个工具类,用于简化与数据库之间的操作步骤,就是TxQueryRunner,他是QueryRunner的子类,用起来和他是一样的,特点是支持事务,使用时需要导入几个jar包,分别是

:

这个工具类的优点基本上就是阿帕奇出的DBUtils框架里边所具有的特点,极大简化操作者的代码量,底层使用c3p0连接池,可以方便的吧数据库查询出来的结果映射到JavaBean,List,Map等中,以下是笔记及代码:

  1. import java.sql.SQLException;
  2. import java.util.List;
  3. import java.util.Map;
  4.  
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.BeanHandler;
  7. import org.apache.commons.dbutils.handlers.BeanListHandler;
  8. import org.apache.commons.dbutils.handlers.MapHandler;
  9. import org.apache.commons.dbutils.handlers.MapListHandler;
  10. import org.apache.commons.dbutils.handlers.ScalarHandler;
  11. import org.junit.Test;
  12.  
  13. import cn.itcast.commons.CommonUtils;
  14. import cn.itcast.jdbc.JdbcUtils;
  15. import cn.itcast.jdbc.TxQueryRunner;
  16.  
  17. /**
  18. * TxQueryRunner它是QueryRunner的子类!(commons-dbutils.jar)
  19. * 可用起来与QueryRunner相似的!
  20. * 我们的类支持事务!它底层使用了JdbcUtils来获取连接!
  21. *
  22. * 简化jdbc的操作
  23. * QueryRunner的三个方法:
  24. * * update() --> insert、update、delete
  25. * * query() --> select
  26. * * batch() --> 批处理
  27. * @author qdmmy6
  28. *
  29. */
  30. public class TxQueryRunnerTest {
  31. /**
  32. * 测试update()方法,用来执行insert、update、delete语句
  33. * @throws SQLException
  34. */
  35. @Test
  36. public void testUpdate() throws SQLException {
  37. String sql = "insert into t_person(pid,pname,age,sex) values(?,?,?,?)";
  38. Object[] params = {"1", "p1", 1, "男"};//给sql中对应的参数
  39.  
  40. QueryRunner qr = new TxQueryRunner();//我们没有给对象提供连接池
  41. qr.update(sql, params);//执行sql,也不提供连接,它内部会使用JdbcUtils来获取连接
  42. }
  43.  
  44. /**
  45. * 使用事务
  46. * @throws SQLException
  47. */
  48. @Test
  49. public void testUpdate2() throws Exception {
  50. try {
  51. JdbcUtils.beginTransaction();//开启事务
  52.  
  53. String sql = "insert into t_person(pid,pname,age,sex) values(?,?,?,?)";
  54. QueryRunner qr = new TxQueryRunner();
  55. Object[] params = {"2", "p2", 2, "女"};
  56. qr.update(sql, params);//执行
  57.  
  58. if(false) {
  59. throw new Exception();
  60. }
  61.  
  62. params = new Object[]{"3", "p3", 3, "女"};
  63. qr.update(sql, params);//执行
  64.  
  65. JdbcUtils.commitTransaction();//提交事务
  66. } catch(Exception e) {
  67. try {
  68. JdbcUtils.rollbackTransaction();//回滚事务
  69. } catch (SQLException e1) {
  70. }
  71. throw e;
  72. }
  73. }
  74.  
  75. /**
  76. * 测试查询方法
  77. * 我们知道JDBC查询的结果的是ResultSet
  78. * 而QueryRunner查询的结果是通过ResultSet映射后的数据。
  79. * * QueryRunner第一步是执行select,得到ResultSet
  80. * * 把ResultSet转换成其他类型的!
  81. * 通过转换结果:
  82. *    * javaBean:把结果集封装到javaBean中
  83. * * Map:把结果集封装到Map中
  84. * * 把结果集封装到Object中(结果集是单行单列)
  85. * @throws SQLException
  86. *
  87. *
  88. */
  89. /*
  90. * 单行结果集映射到javaBean中
  91. */
  92. @Test
  93. public void testQuery1() throws SQLException {
  94. String sql = "select * from t_person where pid=?";
  95. QueryRunner qr = new TxQueryRunner();
  96. /*
  97. * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
  98. *
  99. * BeanHandler --> 它是ResultSetHandler的实现类,它的作用是把结果集封装到Person对象中
  100. */
  101. Person p = qr.query(sql, new BeanHandler<Person>(Person.class), "1");
  102. System.out.println(p);
  103. }
  104.  
  105. /**
  106. * 使用BeanListHandler
  107. * 把多行结果集映射到List<Bean>,即多个JavaBean对象。
  108. * 一行结果集记录对应一个javaBean对象,多行就对应List<Bean>
  109. * @throws SQLException
  110. */
  111. @Test
  112. public void testQuery2() throws SQLException {
  113. String sql = "select * from t_person";
  114. QueryRunner qr = new TxQueryRunner();
  115. /*
  116. * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
  117. *
  118. * BeanListHandler --> 它是ResultSetHandler的实现类,
  119. * 它的作用是把结果集封装到List<Person>对象中
  120. */
  121. List<Person> list = qr.query(sql, new BeanListHandler<Person>(Person.class));
  122. System.out.println(list);
  123. }
  124.  
  125. /**
  126. * 使用MapHandler,把单行结果集封装到Map对象中
  127. * @throws SQLException
  128. */
  129. @Test
  130. public void testQuery3() throws SQLException {
  131. String sql = "select * from t_person where pid=?";
  132. QueryRunner qr = new TxQueryRunner();
  133. /*
  134. * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
  135. *
  136. * BeanListHandler --> 它是ResultSetHandler的实现类,
  137. * 它的作用是把结果集封装到List<Person>对象中
  138. */
  139. Map<String, Object> map = qr.query(sql, new MapHandler(), "1");
  140. System.out.println(map);
  141. }
  142.  
  143. /**
  144. * 使用MapListHandler,把多行结果集封装到List<Map>中,即多个Map
  145. * 一行对应一个Map,多行对应List<Map>
  146. * @throws SQLException
  147. */
  148. @Test
  149. public void testQuery4() throws SQLException {
  150. String sql = "select * from t_person";
  151. QueryRunner qr = new TxQueryRunner();
  152. /*
  153. * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。
  154. *
  155. * BeanListHandler --> 它是ResultSetHandler的实现类,
  156. * 它的作用是把结果集封装到List<Person>对象中
  157. */
  158. List<Map<String, Object>> mapList = qr.query(sql, new MapListHandler());
  159. System.out.println(mapList);
  160. }
  161.  
  162. /**
  163. * 使用ScalarHandler,把单行单列的结果集封装到Object中
  164. * @throws SQLException
  165. */
  166. @Test
  167. public void testQuery5() throws SQLException {
  168. String sql = "select count(*) from t_person";//结果集是单行单列的
  169. QueryRunner qr = new TxQueryRunner();
  170.  
  171. Object obj = qr.query(sql, new ScalarHandler());
  172. /*
  173. * 我们知道select count(1),结果一定是个整数!
  174. * > Integer
  175. * > Long
  176. * > BigInteger
  177. *
  178. * 不同的驱动,结果不同!
  179. * 无论是哪种类型,它都是Number类型!强转成Number一定不出错
  180. */
  181. Number number = (Number)obj;
  182. long cnt = number.longValue();
  183. System.out.println(cnt);
  184. }
  185. }

java操作数据库增删改查的小工具1--TxQueryRunner的更多相关文章

  1. java操作数据库增删改查的小工具2--TxQueryRunner

    当涉及到多表查询时,如数据库中有两张表分别为t_person和t_address,表结构如下: 其中t_person的外键为t-address的主键aid, 新建两个javaBean类,Person ...

  2. 2. MongoDB基本操作 —— 用Mongo.exe操作数据库增删改查

    一.开篇 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象 ...

  3. MongoDB(六)java操作mongodb增删改查

    java操作mysql数据库的代码我们已经了如指掌了.增删改查,java对mongodb数据库也是类似的操作,先是数据库连接.再是进行操作. 首先我们进入进入admin数据库.然后建立自己的数据库te ...

  4. Django-Model操作数据库(增删改查、连表结构)

    一.数据库操作 1.创建model表         基本结构 1 2 3 4 5 6 from django.db import models     class userinfo(models.M ...

  5. phpcms 操作数据库 增删改查

    数据库的其他类继承的都是libs/class/model.class.php 这里面有写好的操作数据库的常用方法 1.增 insert($data, $return_insert_id = false ...

  6. MongoDB学习day04--NodeJs操作数据库增删改查

    一.在Nodejs中使用Mongodb Nodejs需要引入的包 npm install mongodb --save -dev 或者使用镜像 cnpm install mongodb --save ...

  7. Java针对数据库增删改查代码

    package com.bank.abc; import java.beans.PropertyVetoException; import java.sql.Connection; import ja ...

  8. JavaWeb学习记录(七)——MVC操作数据库增删改查与分页功能

    一.分页工具类 package blank.util;import java.util.List; import org.springframework.jdbc.core.JdbcTemplate; ...

  9. struts+hibernate 请求数据库增删改查(小项目实例)

      StudentAction.java package com.action; import java.util.ArrayList; import java.util.List; import j ...

随机推荐

  1. Javascript初学篇章_6(BOM)

    BOM 浏览器对象模型 BOM (浏览器对象模型),它提供了与浏览器窗口进行交互的对象 一.window对象 Window对 象表示整个浏览器窗口. 1.系统消息框 alert() alert('he ...

  2. 全选或反选表格中第一列的checkbok

    <input type="checkbox" onclick="$('table tr > td:first-child input:checkbox').p ...

  3. C语言系统时间读取

    1 读出系统时间(每隔一秒)#include#includeint main(){  while(1) {    time_t t;    t= time(0); struct tm *p;     ...

  4. Ruby 里的 %Q, %q, %W, %w, %x, %r, %s, %i (译)转

    原文地址  转自 %Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: ...

  5. LA

    grmon -altjtag -u 公式rand()%(b-a),是求范围随机数的计算公式,%是做求余运算,正整数对n求余的范围肯定是在0~n-1之间,也就是rand()%(b-a)的范围是0~b-a ...

  6. The easy way to implement a Red-Black tree

    Red-Black trees are notorious for being nightmares of pointer manipulation. Instructors will show th ...

  7. 《.NET之美》消息及勘误

    <.NET之美>消息及勘误 编辑最终还是采用了<.NET之美>作为书名,尽管我一直觉得这个名字有点文艺了,而更倾向于使用<.NET专题解析>这个名称. 目前已经可以 ...

  8. 体验phonegap3.0

    网上有各种各样的phonegap环境搭建资料,鉴于学习和整理的考虑,我还是把我搭建的过程整理出来 这篇文章中将涉及到的内容 PhoneGap环境需要的组件 Node环境 JDK Android SDK ...

  9. Expert 诊断优化系列------------------锁是个大角色

    前面几篇已经陆续从服务器的几个大块讲述了SQL SERVER数据库的诊断和调优方式.加上本篇可以说已经可以完成常规的问题诊断及优化,本篇就是SQL SERVER中的锁.为了方便阅读给出系列文章的导读链 ...

  10. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...