dbutil

DBUtils是一款针对Java编程的数据库操作实用工具,能够显著简化JDBC操作流程,提升开发效率。它不仅支持数据表的读写操作,还兼容数据源、JNDI和数据库连接池等技术,优化性能。本文详细介绍DBUtils的使用方法,包括快速上手步骤、QueryRunner类及ResultSetHandler接口的应用,以及如何利用连接池进一步提高性能。

dbutil:
    DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
    DBUtils封装了对JDBC的操作,简化了JDBC操作。可以少写代码。
    
1.对于数据表的**读操作**,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
2.对于数据表的**写操作**,也变得很简单(只需写sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象
        JNDI,类似于某个框架中的配置文件,但是比它们强大多了,j2ee中的所有框架配置都可以通过它来配置,使应用更加易于配置、易于部署;
        

快速使用:
    导入jar包(dbutils,DBCP的两包用于创建连接池吧)
    创建QueryRunner对象
    使用query方法执行select语句
    使用ResultSetHandler封装结果集
    使用DbUtils类释放资源
    
    
    
QueryRunner类
      QueryRunner qr = new QueryRunner(DataSource ds); 它的事务是自动控制的
      QueryRunner中提供对sql语句操作的API.
        它主要有三个方法
        query() 用于执行select
        update() 用于执行insert update delete
        batch() 批处理
        
        //执行更新语句
        QueryRunner queryRunner = new QueryRunner( dataSource );
        queryRunner.update( "update cat set name='wang' where name='li'" );
    
    
ResultSetHandler接口
      用于定义select操作后,怎样封装结果集.
        //ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]
        //ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List
        中
        //ColumnListHandler:取某一列的数据。封装到List中。
        //KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字
        段值。
        //MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中
        //MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中
        //ScalarHandler:适合取单行单列数据
        
        BeanHandler、BeanListHandler用得比较多:
        
            //查询单个对象
            Cat tom = queryRunner.query( "select * from cat where name='tom'", new BeanHandler<>(
            Cat.class ) );
            System.out.println( "tom = " + tom );
            //查询列表
            List<Cat> query = queryRunner.query( "select * from cat", new BeanListHandler<>(
            Cat.class ) );


DBUtils类
     它就是一个工具类,定义了关闭资源与事务处理的方法

 

 

---------------------------------------

 

连接池:
   --- 类似线程池、字符串常量池
   提高性能,节省创建连接、销毁连接所花费的时间
 
数据库连接池:手写、DBCP(jdbc自带,DataSource API)、C3P0、druid(阿里的连接池,现在都用它)

DBCP:
1、加入jar: commons-pool-1.5.6.jar
             commons-dbcp-1.4.jar
2、编写配置文件(dbcp.properties)

3、使用连接池

      //1. 数据库连接池第一步  去classpath下面去加载配置文件
        DataSource dataSource = null;
        Properties properties = new Properties();
        try {
            //获取配置信息,将内容保存到properties对象里面
            properties.load( DBCPTest.class.getClassLoader().getResourceAsStream( "dbcp.properties" ) );
        } catch (IOException e) {
            e.printStackTrace();
        }

        //2.创建数据源,将配置信息指定给连接池对象
        try {
            dataSource = BasicDataSourceFactory.createDataSource( properties );
        } catch (Exception e) {
            e.printStackTrace();
        }

        //3.通过DataSource得到连接对象
        Connection connection = dataSource.getConnection();
        connection.createStatement().executeUpdate( "update cat set age=88 where name='li'" );

        //4.连接池中拿到的连接对象一般不关闭
        connection.close();

package com.parddu.dao; import java.io.IOException; import java.sql.*; import java.util.Properties; /** * 数据库功能类 * @author parddu * @version Sep 29, 2010 9:49:31 AM */ class DButil { private String driver=null; //驱动 private String dbName=null; //数据库名 private String host=null; //主机名 private String point=null; //端口 private String userName=null; //登录帐号 private String userPass=null; //登录密码 private static DButil info = null; private DButil(){} /** * 初始化方法,加载数据库连接信息 * @throws IOException */ private static void init() throws IOException{ Properties prop = new Properties(); prop.load(DButil.class.getResourceAsStream("/db_config.properties")); info = new DButil(); info.driver = prop.getProperty("driver"); info.dbName = prop.getProperty("dbName"); info.host = prop.getProperty("host"); info.point = prop.getProperty("point"); info.userName = prop.getProperty("userName"); info.userPass = prop.getProperty("userPass"); } /** * 得到数据库连接对象 * @return 数据库连接对象 */ static Connection getConn(){ Connection conn=null; if(info == null){ try { init(); } catch (IOException e) { throw new RuntimeException(e.getMessage()); } } if(info!=null){ try { Class.forName(info.driver); String url="jdbc:sqlserver://" + info.host + ":" + info.point + ";databaseName=" + info.dbName; conn=DriverManager.getConnection(url,info.userName,info.userPass); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } else{ throw new RuntimeException("读取数据库配置信息异常!"); } return conn; } /** * 关闭查询数据库访问对象 * @param rs 结果集 * @param st 上下文 * @param conn 连接对象 */ static void closeConn(ResultSet rs, Statement st,Connection conn){ try { rs.close(); } catch (Exception e) {} try { st.close(); } catch (Exception e) {} try { conn.close(); } catch (Exception e) {} } /** * 关闭增、删、该数据库访问对象 * @param st 上下文对象 * @param conn 连接对象 */ static void closeConn(Statement st ,Connection conn){ try{ st.close(); conn.close(); }catch(Exception e){} } }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值