Apache—DBUtils简介
来源:互联网 发布:安卓应用下载知乎 编辑:程序博客网 时间:2024/06/05 08:48
一、commons-dbutils简介
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
API介绍:org.apache.commons.dbutils.QueryRunner
org.apache.commons.dbutils.ResultSetHandler
工具类
org.apache.commons.dbutils.DbUtils。
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。
commons-dbutilsAPI介绍:
org.apache.commons.dbutils.QueryRunner
org.apache.commons.dbutils.ResultSetHandler
工具类
org.apache.commons.dbutils.DbUtils
二、QueryRunner类使用讲解
该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
QueryRunner类提供了两个构造方法:
- 默认的构造方法
- 需要一个 javax.sql.DataSource 来作参数的构造方法。
- 需要一个 javax.sql.DataSource 来作参数的构造方法。
2.1、QueryRunner类的主要方法
一、public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:
执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
二、public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException:
几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
三、public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException :
执行一个不需要置换参数的查询操作。
class MyRsultSetHandler implements ResultSetHandler{
@Override
public Object handle(ResultSet resultSet) throws SQLException {
List<Customer>customers=new ArrayList<>();
while(resultSet.next()){
Integer id=resultSet.getInt(1);
String name=resultSet.getString(2);
String email=resultSet.getString(3);
Date birth=resultSet.getDate(4);
Customer customer=new Customer(id, name, email, birth);
customers.add(customer);
}
return customers;
}
}
/**
* QueryRuner的Query方法的返回值取决于其ResultSetHandler参数的
* handle()方法的返回值。
*/
@Test
public void testQuery(){
//1.创建QueryRunner的实现类
QueryRunner queryRunner=new QueryRunner();
Connection connection=null;
try {
String sql="SELECT customers_id,customers_name,customers_email,customers_birth FROM customers";
connection=new ConnTest().getconnection();
//new MyRsultSetHandler() ;
//可以执行类中的方法
Object obj=queryRunner.query(connection, sql, new MyRsultSetHandler());
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}finally{
ConnTest.release(connection, null, null);
}
}
四、public int update(Connection conn, String sql, Object[] params) throws SQLException:
/**
* 测试QueryRunner类的update方法
* 该方法可以 insert、delete、update
*/
@Test
public void testQueryRunnerUpdate(){
//1.创建QueryRunner的实现类
QueryRunner queryRunner=new QueryRunner();
//2.使用其update方法
String sql="DELETE FROM customers WHERE customers_id=?";
Connection connection=null;
try {
connection=new ConnTest().getconnection();
queryRunner.update(connection, sql, 5);
} catch (Exception e) {
e.printStackTrace();
}finally{
ConnTest.release(connection, null, null);
}
}
用来执行一个更新(插入、更新或删除)操作。
五、public int update(Connection conn, String sql) throws SQLException:
用来执行一个不需要置换参数的更新操作。
看源代码的意图是:教你如何的处理这一问题的方法,思维很重要。
Value '0000-00-00' can not be represented as java.sql.Date:
解决办法:
确实是这个原因。。。表中读数据中有一个字段的值是0000-00-00该成2012-05-11就好了。。。
三、ResultSetHandler接口使用讲解
该接口用于处理java.sql.ResultSet,将数据按要求转换为另一种形式。
ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)
3.1、ResultSetHandler接口的实现类
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
ColumnListHandler:将结果集中某一列的数据存放到List中。
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
举例说明:
/**
* BeanListHandler:把结果集转化为一个List,该List不为null
* 但可能为空集合(size()方法返回0)
* 若sql语句的确定能够查询到记录,List中存在创建
* BeanListHandler传入到Class对象对应的对象
*/
@Test
public void testBeanListHandler(){
Connection connection=null;
QueryRunner queryRunner=new QueryRunner();
try {
String sql="SELECT customers_id,customers_name,customers_email,customers_birth FROM customers";
connection=new ConnTest().getconnection();
List<Customer>customers=queryRunner.query(connection, sql,new BeanListHandler(Customer.class));
System.out.println(customers);
} catch ( Exception e) {
e.printStackTrace();
}finally{
ConnTest.release(connection, null, null);
}
}
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
/*
* MapListHandler:将结果集转化为一个Map的list
* Map对应查询一条记录:键:sql查询的猎命(不是雷的别明年)
* 而MapListHandler:返回的多条记录对应的Map的集合
*/
@Test
public void testMapListHandler(){
Connection connection=null;
QueryRunner queryRunner=new QueryRunner();
try {
String sql="SELECT customers_id,customers_name,customers_email,customers_birth FROM customers";
connection=new ConnTest().getconnection();
List<Map<String, Object>> result=queryRunner.query(connection, sql,new MapListHandler());
System.out.println(result);
} catch ( Exception e) {
e.printStackTrace();
}finally{
ConnTest.release(connection, null, null);
}
}
@Test
public void testScalarHandler(){
Connection connection=null;
QueryRunner queryRunner=new QueryRunner();
try {
String sql="SELECT customers_name FROM customers where customers_id=?";
connection=new ConnTest().getconnection();
Object result=queryRunner.query(connection, sql,new ScalarHandler(),7);
System.out.println(result);
} catch ( Exception e) {
e.printStackTrace();
}finally{
ConnTest.release(connection, null, null);
}
}
- Apache—DBUtils简介
- Apache—DBUtils框架简介
- Apache---DBUtils框架简介
- Apache---DBUtils框架简介
- Apache---DBUtils框架简介
- Apache-DBUtils工具简介
- apache commons 之 DbUtils简介
- Apache-dbutils 简介及事务处理
- JNDI技术简介和Apache—DBUtils框架(QueryRunner类)
- Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- 关闭 Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- 浅析最近很火的react-native技术
- Myeclipse8.5启动tomcat控制台显示java.lang.OutOfMemoryError: Java heap space的解决
- Java并发编程:Callable、Future和FutureTask
- Android 学习笔记 10 Hnadler
- Linux信号机制学习笔记-----Linux信号机制的疑问?????
- Apache—DBUtils简介
- -l参数和-L参数
- 64位系统连接数据库:在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配的问题
- 在framework或子工程中使用xib
- Windows 2012 R2上搭建IIS管理用户的隔离模式FTP
- springmvc 和 mybatis 的相关配置
- mysql 学习---->字符串、数值处理、日期、查询的逻辑处理、系统相关内容查询、IP地址相关、密码
- Deep learning系列(七)激活函数
- Apktool源码解析——第二篇