Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 260|回复: 0

[JDBC学习]commons_dbutils使用实例

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 02:04:32 | 显示全部楼层 |阅读模式
    一、Commons dbutils是什么?    commons-dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,对传统操作数据库的类进行二次封装,可以把结果集转化成List。  二、Commons dbutils主要相关类及接口的简介:
       主要讲解两个类(org.apache.commons.dbutils.DbUtils 和org.apache.commons.dbutils.QueryRunner)和一个接口(org.apache.commons.dbutils.ResultSethandler)。  (1):DbUtils类:为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,
    它里面所有的方法都是静态的。  A:loadDriver(String driveClassName): 这一方法装载并注册JDBC驱动程序,如果成功就返回TRUE,不需要去捕捉ClassNotFoundException异常。通过返回值判断驱动程序是否加载成功。  B:public static void close() throws java.sql.SQLException方法:
        DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭连接(Connection)、声明(Statement)或者结果集(ResultSet)对象。  C:closeQuietly方法:
        closeQuietly这一方法不仅能在连接、声明或者结果集为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLException。如果你不想捕捉这些异常的话,这对你是非常有用的。在重载closeQuietly方法时,特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),使用这一方法,你最后的块就可以只需要调用这一方法即可。  D: commitAndCloseQuietly(Connection conn)方法和commitAndClose (Connection conn)方法:
        这两个方法用来提交连接,然后关闭连接,不同的是commitAndCloseQuietly(Connection conn)方法关闭连接时不向上抛出在关闭时发生的一些SQL异常而commitAndClose (Connection conn)方法向上抛出SQL异常。  (2):QueryRunner类:该类简单化了 SQL 查询,它与 ResultSetHandler(接口) 组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量
    【构造函数
    (1):QueryRunner()
    (2):QueryRunner(Datasource ds)】。  A:query(Connection conn, String sql, Object[] params, ResultSetHandler rsh)方法:
       这一方法执行一个带参数的选择查询,在这个查询中,对象数组的值被用来作为查询的置换参数。这一方法内在地处理PreparedStatement 和ResultSet 的创建和关闭。ResultSetHandler对象把从 ResultSet得来的数据转变成一个更容易的或是应用程序特定的格式来使用。  B:query(String sql, Object[] params, ResultSetHandler rsh)方法:这几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造器的数据源(DataSource) 或使用的setDataSource 方法中重新获得的。  C:query(Connection conn, String sql, ResultSetHandler rsh)方法:这执行一个带参数的选择查询。  D:update(Connection conn, String sql, Object[] params)方法:这一方法被用来执行一个带参数的插入、更新或删除操作。对象数组为置换参数。  E:update(String sql, Object[] params)方法: 这几乎与上一种种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造器的数据源(DataSource) 或使用的setDataSource 方法中重新获得的。  F:update(Connection conn, String sql)方法:这执行一个带参数的插入、更新或删除操作。  (3):ResultSetHandler接口:




    三、实例:

    1.           
    2.         import java.sql.Connection;   
    3.         import java.sql.DriverManager;   
    4.         import java.sql.SQLException;   
    5.         import java.util.*;   
    6.         import java.util.Map.Entry;
    7.        
    8.           
    9.         import org.apache.commons.dbutils.DbUtils;   
    10.         import org.apache.commons.dbutils.QueryRunner;   
    11.         import org.apache.commons.dbutils.handlers.ArrayHandler;   
    12.         import org.apache.commons.dbutils.handlers.ArrayListHandler;   
    13.         import org.apache.commons.dbutils.handlers.BeanHandler;   
    14.         import org.apache.commons.dbutils.handlers.BeanListHandler;   
    15.         import org.apache.commons.dbutils.handlers.ColumnListHandler;   
    16.         import org.apache.commons.dbutils.handlers.KeyedHandler;   
    17.         import org.apache.commons.dbutils.handlers.MapHandler;   
    18.         import org.apache.commons.dbutils.handlers.MapListHandler;   
    19.         import org.apache.commons.dbutils.handlers.ScalarHandler;   
    20.         import guestbook.po.Guestbook;
    21.           
    22.         public class TestDbutils {   
    23.          @SuppressWarnings("unchecked")   
    24.          public static void main(String[] args) throws ClassNotFoundException {   
    25.            Guestbook guestb=null;
    26.            Connection conn=null;
    27.           String jdbcURL = "jdbc:mysql://localhost:3306/mysql_guestbook";   
    28.           String jdbcDriver = "com.mysql.jdbc.Driver";   
    29.           try {   
    30.            DbUtils.loadDriver(jdbcDriver);   
    31.            conn = DriverManager.getConnection(jdbcURL, "root", "8345660");   
    32.            conn.setAutoCommit(false);//关闭自动提交   

    33.            QueryRunner qRunner = new QueryRunner();   
    34.           
    35.            // 以下部分代码采用MapHandler存储方式查询(查一条记录)  
    36.            System.out.println("***Using MapHandler***");   
    37.            Map map =(Map)qRunner.query(conn, "select * from guestbook where id = ?",  new MapHandler(), new Object[]{1});
    38.            System.out.println("id ------------- name------------- title");   
    39.            System.out.println(map.get("id")+"  -------------"+map.get("name")+"-------------"+map.get("title"));
    40.            System.out.println();
    41.            // 以下部分代码采用MapListHandler存储方式查询(查一个表中所有记录)   
    42.            System.out.println("***Using MapListHandler***");   
    43.            List lMap = (List) qRunner.query(conn,  "select * from guestbook", new MapListHandler());   
    44.           
    45.            System.out.println("id ------------- name------------- title");   
    46.            for (int i = 0; i < lMap.size(); i++) {   
    47.             Map vals = (Map) lMap.get(i);   
    48.             System.out.println(vals.get("id") + "  ------------- " + vals.get("name")+"-------------"+vals.get("title"));   
    49.            }   
    50.             System.out.println();
    51.            // 以下部分代码采用BeanHandler存储方式查询 (查一条记录)   
    52.            System.out.println("***Using BeanHandler***");   
    53.            guestb = (Guestbook) qRunner.query(conn,"select * from guestbook where id = ?",
    54.                new BeanHandler(Guestbook.class), new Object[] {1});   
    55.              System.out.println("id ------------- name------------- title");     
    56.            System.out.println(guestb.getId() + "  ------------- "+guestb.getName()+"-------------"+guestb.getTitle());   
    57.            System.out.println();
    58.            // 以下部分代码采用BeanListHandler存储方式查询  (查一个表中所有记录)   
    59.            System.out.println("***Using BeanListHandler***");   
    60.            List lBean = (List) qRunner.query(conn, "select * from guestbook", new BeanListHandler(Guestbook.class));   
    61.            System.out.println("id ------------- name------------- title");   
    62.            for (int i = 0; i < lBean.size(); i++) {   
    63.              guestb = (Guestbook) lBean.get(i);   
    64.              System.out.println(guestb.getId() + "  ------------- "+guestb.getName()+"-------------"+guestb.getTitle());
    65.            }  
    66.              System.out.println();   
    67.             // 以下部分代码采用ArrayHandler存储方式查询  (查一条记录)
    68.            System.out.println("***Using ArrayHandler***");
    69.            Object[] array = (Object[]) qRunner.query(conn, "select id,name,title from guestbook where id = ?",
    70.              new ArrayHandler(), new Object[] {1});   
    71.           
    72.            System.out.println("id ------------- name------------- title");
    73.            System.out.println(array[0].toString() + "  ------------- "  +array[1]+ "-------------"+array[2].toString());   
    74.            System.out.println();
    75.            // 以下部分代码采用ArrayListHandler存储方式查询 (查一个表中所有记录)   
    76.            System.out.println("***Using ArrayListHandler***");   
    77.            List lArray = (List) qRunner.query(conn, "select id,name,title from guestbook", new ArrayListHandler());   
    78.             System.out.println("id ------------- name------------- title");      
    79.            for (int i = 0; i < lArray.size(); i++) {   
    80.             Object[] var = (Object[]) lArray.get(i);   
    81.             System.out.println(var[0].toString() + "  ------------- " + var[1].toString()+"------------- "  +var[2]);   
    82.            }   
    83.             System.out.println();  
    84.             // 以下部分代码采用ColumnListHandler存储方式查询指定列   
    85.            System.out.println("***Using ColumnListHandler***");   
    86.            List lName = (List) qRunner.query(conn, "select * from guestbook", new ColumnListHandler("name"));   
    87.            System.out.println("name ");   
    88.            for (int i = 0; i < lName.size(); i++) {   
    89.             String name = (String) lName.get(i);   
    90.             System.out.println(name);   
    91.            }   
    92.            System.out.println();  
    93.             // 以下部分代码采用ScalarHandler存储方式查询   
    94.            System.out.println("***Using ScalarHandler***");   
    95.            String name = (String) qRunner.query(conn, "select * from guestbook where id = ?",  
    96.                new ScalarHandler("name"), new Object[] {1});   
    97.           
    98.            System.out.println("name ");   
    99.            System.out.println(name);   
    100.            System.out.println();   
    101.   
    102.            // 以下部分代码采用KeyedHandler存储方式查询   
    103.            System.out.println("***Using KeyedHandler***");   
    104.            //将结果集中的每一行数据都封装一个map中,再将这些map存到一个map中,其key是列名  
    105.            Map< Integer,Map< String,Object>> map1 =
    106.              (Map) qRunner.query(conn,"select * from guestbook",new KeyedHandler("id"));  
    107.            Set< Entry< Integer, Map< String, Object>>>  set=map1.entrySet();  
    108.            for(Map.Entry< Integer,Map< String,Object>> entry:set){  
    109.               Set< Entry< String, Object>>  innerset=entry.getValue().entrySet();  
    110.               for(Map.Entry< String,Object>innerse:innerset){  
    111.                 System.out.println(innerse.getKey()+"="+innerse.getValue());  
    112.               }  
    113.             }
    114.           System.out.println();   
    115.           
    116.            
    117.            // 以下部分代码插入一条数据   
    118.            System.out.println("***Insert begin***");   
    119.           
    120.            qRunner.update(conn, "insert into guestbook(name,title,content,time,phone,email) values(?,?,?,?,?,?)",
    121.             new Object[] {"王五","学习Dbutils","网上找找","2012-07-08","22605512","zzer@sina.com"});   
    122.            
    123.            System.out.println("***update end***");   
    124.            
    125.           System.out.println();   
    126.           // 以下部分代码更新一条数据   
    127.            System.out.println("***update begin***");   
    128.           
    129.            qRunner.update(conn, "update guestbook set name = ?,title=? where id = ?",
    130.               new Object[] {"www.java3z.com","java jsp",4});   
    131.            System.out.println("***update end***");   
    132.           
    133.            System.out.println();   
    134.              // 以下部分代码删除一条数据   
    135.            System.out.println("***delete begin***");   
    136.             qRunner.update(conn, "delete from guestbook where id = ?", new Object[] {2});   
    137.            System.out.println("***delete end***");   
    138.             DbUtils.commitAndCloseQuietly(conn);
    139.           } catch (SQLException ex) {   
    140.            ex.printStackTrace();   
    141.            try {   
    142.             System.out.println("***rollback begin***");   
    143.             DbUtils.rollback(conn);   
    144.             System.out.println("***rollback end***");   
    145.            } catch (SQLException e) {   
    146.             e.printStackTrace();   
    147.            }   
    148.           } finally {   
    149.            DbUtils.closeQuietly(conn);   
    150.           }   
    151.           
    152.          }   
    153.         }  
    154.                                                   
    155.                                                   
    156.                                                   
    157.                                                   
    复制代码

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/11/020432546.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-2 16:02 , Processed in 0.375104 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表