zoukankan      html  css  js  c++  java
  • 【Java EE 学习 16 下】【dbutils的使用方法】

    一、为什么要使用dbutils

      使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高

    二、dbutils下载地址

      http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi


    出现的ds为数据源对象,可以是某个数据库连接池的DataSource,也可以是自定义数据库连接池的DataSource,这里我是用了dbcp数据库连接池。

     1 package day16.regular.utils;
     2 
     3 import java.io.IOException;
     4 import java.sql.Connection;
     5 import java.sql.SQLException;
     6 import java.util.Properties;
     7 
     8 import javax.sql.DataSource;
     9 
    10 import org.apache.commons.dbcp2.BasicDataSourceFactory;
    11 
    12 
    13 //使用第三方jar包创建dbcp连接池
    14 public class DataSourceUtils_DBCP {
    15     private DataSourceUtils_DBCP(){}//使用私有修饰构造方法,可以防止创建对象,这样可以确保只有一个DataSource对象
    16     private static DataSource ds;
    17     static
    18     {
    19         Properties properties=new Properties();
    20         try {
    21             properties.load(DataSourceUtils_DBCP.class.getClassLoader().getResourceAsStream("config_dbcp.properties"));
    22             ds=BasicDataSourceFactory.createDataSource(properties);
    23         } catch (IOException e) {
    24             e.printStackTrace();
    25         } catch (Exception e) {
    26             e.printStackTrace();
    27         }
    28     }
    29     public static Connection getConnection()
    30     {
    31         Connection conn=null;
    32         try {
    33             conn=ds.getConnection();
    34         } catch (SQLException e) {
    35             e.printStackTrace();
    36         }
    37         return conn;
    38     }
    39     public static DataSource getDataSource()
    40     {
    41         return ds;
    42     }
    43 }
    DataSourceUtils_DBCP.java
    private static DataSource ds=DataSourceUtils_DBCP.getDataSource();

    三、更新操作方法示例(delete语句略)。

    public void testInsert()
        {
            QueryRunner run=new QueryRunner(ds);
            String sql="insert into people(id,name,age,sex) values(?,?,?,?)";
            try {
                run.update(sql,"001","小强",12,"男");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

      使用dbutils可以实现预编译。

    四、ArrayListHandler用法(不需掌握)。

    public void testSelect_ArrayListHandler() throws SQLException
        {
            QueryRunner run=new QueryRunner(ds);
            String sql="select * from people";
            List<Object[]>arr=run.query(sql,new ArrayListHandler());
            //执行该方法将所有的结果存放到了一个list中,每一行结果保存到一个object数组中
            for(Object obj[]:arr)
            {
                for(Object o:obj)
                {
                    System.out.print(o+" ");
                }
                System.out.println();
            }
            /**
             *     001 小强 12 男 
                002 张三 13 男 
                003 李四 14 男 
                004 王五 14 男 
                005 赵六 14 男 
                006 陈七 14 男 
             */
        }

    五、BeanHandler和BeanListHandler用法(重点掌握)

      1.BeanHandler:调用QueryRunner的query方法,并提供相应的参数,就可以获取一个已经封装好了的Bean对象(需要实现准备好一个javaBean,字段名要完全匹配)。

    public void testSelect_BeanHandler() throws SQLException
        {
            QueryRunner run=new QueryRunner(ds);
            String sql="select * from people";
            People people=run.query(sql,new BeanHandler<People>(People.class));
            //使用该方法能够自动将结果集的第一行封装到一个Bean对象中。
            System.out.println(people);
            /**
             * People [id=001, name=小强, age=12, sex=男]
             */
        }

      2.BeanListHandler:调用QueryRunner的query方法,并提供相应的参数,就可以获取一个List对象,该对象中的每一个元素都是一个javabean对象。

    public void testSelect_BeanListHandler() throws SQLException
        {
            QueryRunner run=new QueryRunner(ds);
            String sql="select * from people";
            List<People>list=run.query(sql, new BeanListHandler<People>(People.class));
            for(People people:list)
            {
                System.out.println(people);
            }
            /**
             *     People [id=001, name=小强, age=12, sex=男]
                People [id=002, name=张三, age=13, sex=男]
                People [id=003, name=李四, age=14, sex=男]
                People [id=004, name=王五, age=14, sex=男]
                People [id=005, name=赵六, age=14, sex=男]
                People [id=006, name=陈七, age=14, sex=男]
             */
        }

    六、ColumnListHandler:获取某个字段的所有取值,并封装到一个List对象中(不要求掌握)。

    public void testSelect_ColumnListHandler() throws SQLException
        {
            QueryRunner run=new QueryRunner(ds);
            String sql="select * from people";
            List<String>list=run.query(sql, new ColumnListHandler<String>("sex"));//不带任何参数的默认查询第一行
            for(String obj:list)
            {
                System.out.println(obj);
            }
            /**
             *     男
                男
                男
                男
                男
                男
             */
        }

    七、KeyedHandler:获取一个键值对,键为表的主键,值为一个Map对象,该封装了一行数据的键值对,键是字段名(重点掌握)。

    public void testSelect_KeyHandler() throws SQLException
        {
            //该方法不重要,不需要重点掌握
            QueryRunner run=new QueryRunner(ds);
            String sql="select * from people";
            Map<String, Map<String, Object>>map=run.query(sql, new KeyedHandler<String>("id"));
            Iterator<String>it=map.keySet().iterator();
            while(it.hasNext())
            {
                Map<String,Object>m=map.get(it.next());
                System.out.println(m);
            }
        /*    {id=004, name=王五, age=14, sex=男}
            {id=005, name=赵六, age=14, sex=男}
            {id=006, name=陈七, age=14, sex=男}
            {id=001, name=小强, age=12, sex=男}
            {id=002, name=张三, age=13, sex=男}
            {id=003, name=李四, age=14, sex=男}
         */
        }

    八、MapHandler:封装第一行数据到一个Map对象(不需要掌握)。

    public void testSelect_MapHandler() throws SQLException
        {
            QueryRunner run=new QueryRunner(ds);
            String sql="select * from user";
            Map<String, Object>map=run.query(sql,new MapHandler());
            //该执行结果只封装第一行。
            System.out.println(map);
    /*        {id=0001, name=小强, age=12}*/
        }    

    九、MapListHandler:封装每一行数据到一个Map,并保存到一个List中。(重点掌握)

    public void testSelect_MapListHandler() throws SQLException
        {
            QueryRunner run=new QueryRunner(ds);
            String sql="select * from user";
            List<Map<String,Object>> list=run.query(sql, new MapListHandler());
            /**
             * 该语句的执行结果是将数据库的查询结果存放到List中,其中每一行存放到一个Map对象中。
             */
            for(Map<String,Object> map:list)
            {
                System.out.println(map);
            }
            /*
                {id=0001, name=小强, age=12}
                {id=0002, name=小明, age=13}
            */
        }

    十、ScalarHandler:使用聚合函数(如count、sum等)的时候可以使用该方法简化书写(重点掌握)

    public void testSelect_ScalarHandler() throws SQLException
        {
            QueryRunner run=new QueryRunner(ds);
            String sql="select count(1) from user";
            Object value=run.query(sql, new ScalarHandler<Object>());
            //ScalarHandler用于执行带有聚合函数的查询,执行count方法的时候比较方便。
            System.out.println(value);
        }
      /*
        2
      */
  • 相关阅读:
    Myflight航班查询系统
    《java语法实例2~15章》
    第九章
    第八章
    第六章
    第五章
    第四章
    php_mvc实现步骤十
    php_mvc实现步骤九(登录验证码,退出-登录标记)
    php_mvc实现步骤八
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/4684109.html
Copyright © 2011-2022 走看看