1、开发前准备

创建java pro为dbutils_1,没有lib目录,建一个即可

/dbutils_1/lib/mysql-connector-java-5.0.8-bin.jar

数据库搭建c3p0

/dbutils_1/src/c3p0-config.xml

/dbutils_1/lib/c3p0-0.9.2-pre1.jar

/dbutils_1/lib/mchange-commons-0.2.jar

2、包commons-dbutils-1.2.jar

3、工具类JdbcUtils.java

  1. package cn.itcast.utils;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.SQLException;
  5.  
  6. import javax.sql.DataSource;
  7.  
  8. import com.mchange.v2.c3p0.ComboPooledDataSource;
  9.  
  10. public class JdbcUtils {
  11. private static ComboPooledDataSource ds = null;
  12.  
  13. // 创建c3p0连接池,真个应用只需要初始化一次,放在静态代码块里面
  14. static {
  15. ds = new ComboPooledDataSource("flx");
  16. }
  17.  
  18. // 取得连接
  19. public static Connection getConnection() throws SQLException {
  20. return ds.getConnection();
  21. }
  22.  
  23. // 获取连接池
  24. public static DataSource getDataSource(){
  25. return ds;
  26. }
  27. }

4、数据库操作

增、删、改、查、批处理、大数据

  1. package cn.itcast.demo;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.IOException;
  7. import java.sql.SQLException;
  8. import java.util.Date;
  9. import java.util.List;
  10.  
  11. import javax.sql.rowset.serial.SerialClob;
  12.  
  13. import org.apache.commons.dbutils.QueryRunner;
  14. import org.apache.commons.dbutils.handlers.BeanHandler;
  15. import org.apache.commons.dbutils.handlers.BeanListHandler;
  16. import org.junit.Test;
  17.  
  18. import cn.itcast.domain.User;
  19. import cn.itcast.utils.JdbcUtils;
  20.  
  21. public class Demo1 {
  22.  
  23. /*
  24. *
  25. * 使用dbutils框架完成curd,以及批处理
  26. *
  27. create database day17; use day17;
  28.  
  29. create table user(
          id int primary key auto_increment,
           name varchar(40),
  30.        password varchar(40),
           email varchar(60),
           birthday date );
  31.  
  32. insert into user(name,password,email,birthday)values('zs','123456','zs@sina.com','1980-09-09');
  33. insert into user(name,password,email,birthday) values('lisi','123456','lisi@sina.com','1980-09-09');
  34. insert into user(name,password,email,birthday) values('wangwu','123456','wangwu@sina.com','1980-09-09');
  35. *
  36. */
  37.  
  38. @Test
  39. public void add() throws SQLException {
  40.  
  41. QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
  42. String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";
  43. Object params[] = { "ccc", "123", "cc@sina.com", new Date() };
  44. qr.update(sql, params);
  45. }
  46.  
  47. @Test
  48. public void delete() throws SQLException {
  49.  
  50. QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
  51. String sql = "delete from user where id=?";
  52. qr.update(sql, 1);
  53.  
  54. }
  55.  
  56. @Test
  57. public void update() throws SQLException {
  58. QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
  59. String sql = "update user set name=? where id=?";
  60. Object params[] = { "ddd", 5 };
  61. qr.update(sql, params);
  62. }
  63.  
  64. @Test
  65. public void find() throws SQLException {
  66. QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
  67. String sql = "select * from user where id=?";
  68. Object params[] = { 2 };
  69. User user = (User) qr.query(sql, params, new BeanHandler(User.class));
  70. System.out.println(user.getBirthday());
  71. }
  72.  
  73. @Test
  74. public void getAll() throws SQLException {
  75. QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
  76. String sql = "select * from user";
  77. List list = (List) qr.query(sql, new BeanListHandler(User.class));
  78. System.out.println(list.size());
  79. }
  80.  
  81. //批处理插入多条数据
  82. @Test
  83. public void testBatch() throws SQLException {
  84. QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
  85. String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";
  86. Object params[][] = new Object[10][];
  87. for (int i = 0; i < 10; i++) {
  88. params[i] = new Object[] { "aa" + i, "123", "aa@sina.com",
  89. new Date() };
  90. }
  91. qr.batch(sql, params);
  92. }
  93.  
  94. // 用dbutils完成大数据(不建议用)
  95. /***************************************************************************
  96. create table testclob
  97. (
  98. id int primary key auto_increment,
  99. resume text
  100. );
  101. * @throws SQLException
  102. * @throws IOException
  103. **************************************************************************/
  104.  
  105. @Test
  106. public void testclob() throws SQLException, IOException{
  107. QueryRunner runner = new QueryRunner(JdbcUtils.getDataSource());
  108. String sql = "insert into testclob(resume) values(?)"; //clob
  109.  
  110. //替换参数
  111. /*String path = Demo1.class.getClassLoader().getResource("1.txt").getPath();
  112. Object params[] = {new FileReader(path)};
  113. */
  114.  
  115. String path = Demo1.class.getClassLoader().getResource("1.txt").getPath();
  116. FileReader in = new FileReader(path);
  117. char[] buffer = new char[(int) new File(path).length()];
  118. in.read(buffer);
  119. SerialClob clob = new SerialClob(buffer);
  120. Object params[] = {clob};
  121. runner.update(sql, params);
  122. }
  123.  
  124. }

5、源码下载

http://files.cnblogs.com/lxsky/dbutils_1.zip

6、DBUtils对结果集自动封装可以使用下面的,详细可参考http://www.cnblogs.com/yezhenhan/archive/2011/01/11/1932556.html

  1. ArrayHandler:把结果集中的第一行数据转成对象数组。
  2. ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
  3. BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  4. BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  5. ColumnListHandler:将结果集中某一列的数据存放到List中。
  6. KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。
  7. MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  8. MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
  9. ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object

  

JdbcUtils 系列1的更多相关文章

  1. day17(JDBC入门&jdbcUtils工具介绍)

    day17 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中url ...

  2. MySQL 系列(二)Jdbc

    MySQL 系列(二)Jdbc 一.Jdbc 基本操作 import java.sql.Connection; import java.sql.DriverManager; import java.s ...

  3. 源码详解系列(六) ------ 全面讲解druid的使用和源码

    简介 druid是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能,另外,druid还扩展 ...

  4. 源码详解系列(八) ------ 全面讲解HikariCP的使用和源码

    简介 HikariCP 是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能,另外,和 dr ...

  5. Mybatis详解系列(一)--持久层框架解决了什么及如何使用Mybatis

    简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...

  6. Spring系列之JDBC对不同数据库异常如何抽象的?

    前言 使用Spring-Jdbc的情况下,在有些场景中,我们需要根据数据库报的异常类型的不同,来编写我们的业务代码.比如说,我们有这样一段逻辑,如果我们新插入的记录,存在唯一约束冲突,就会返回给客户端 ...

  7. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  8. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  9. Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

    jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...

随机推荐

  1. JQuery Datatables Dom 和 Language 参数详细说明

    http://linleizi.iteye.com/blog/2086435 *********************************** Data Tables: http://datat ...

  2. 浅谈AJAX的基本原理和原生AJAX的基础用法

    一.什么是AJAX? AJAX,即"Asynchronous Javascript And XML",翻译为异步的JavaScript和XML,是一种创建交互式网页应用的网页开发技 ...

  3. ArcGIS学习推荐

    1.  Arcgis Desktop 10帮助库 ArcGIS 系统的帮助库.该帮助库已经过编译,可为 ArcGIS 各方面的应用提供综合文档.建立该库的目的是满足以下各类主要用户的需求: GIS 专 ...

  4. javascript复习总结

    改变HTML内容:document.getElementById(id).innerHTML = new HTML; 改变HTML属性:document.getElementById(id).inne ...

  5. 介绍开源的.net通信框架NetworkComms框架之二 传递类

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地 ...

  6. iOS开发UI篇—使用picker View控件完成一个简单的选餐应用

    iOS开发UI篇—使用picker View控件完成一个简单的选餐应用 一.实现效果 说明:点击随机按钮,能够自动选取,下方数据自动刷新. 二.实现思路 1.picker view的有默认高度为162 ...

  7. iOS开发拓展篇—静态库

    iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...

  8. oracle 11g 空表也导出

    查询空表 并导出修改空表语句 select 'alter table '||table_name||' allocate extent;' from user_tables where num_row ...

  9. Node.js 常用工具 util

    util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherits(constructor ...

  10. ajax 创建对象验证

    function getValue(){ var str = $("#selectid option:selected").val(); //获得选中的值 var num = $( ...