DbUtils
•commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
QueryRunner类
•该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
•QueryRunner类提供了两个构造方法:
–默认的构造方法
–需要一个 javax.sql.DataSource 来作参数的构造方法。
主要方法:
•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 : 执行一个不需要置换参数的查询操作。
•public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
•public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。
下面代码是对dbutils的简单的使用:
package com.jdbc.dbutils;
import com.jdbc.beans.Persion;
import com.jdbc.utils.JDBCTools;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class DbUtilsTest {
public void test(){
QueryRunner queryRunner=new QueryRunner();
Connection connection= JDBCTools.getConnection();
String sql="insert into classes values('xxx',29,'nan',?)";
try {
queryRunner.update(connection,sql,120);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCTools.release(connection,null);
}
}
/**
* 测试查询方法ResultSetHandler
*/
public void testQuery() {
QueryRunner queryRunner=new QueryRunner();
Connection connection = JDBCTools.getConnection();
String sql="select * from classes where name='xxx'";
try {
queryRunner.query(connection, sql, new ResultSetHandler<Persion>() {
@Override
public Persion handle(ResultSet resultSet) throws SQLException {
if(resultSet.next()){
String name = resultSet.getString(1);
int age = resultSet.getInt(2);
String string = resultSet.getString(3);
int anInt = resultSet.getInt(4);
Persion persion = new Persion(name, age, string, anInt);
System.out.println(persion);
}
return null;
}
});
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCTools.release(connection,null);
}
}
/**
* 测试查询方法BeanListHandler
*/
public void testBeanlisthandler() {
QueryRunner queryRunner=new QueryRunner();
Connection connection = JDBCTools.getConnection();
String sql="select * from classes where name='xxx'";
try {
List<Persion> query = queryRunner.query(connection, sql, new BeanListHandler<Persion>(Persion.class));
System.out.println(query);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCTools.release(connection,null);
}
}
/**
* 测试查询方法BeanHandler
* 注意sql的别名
*/
public void testBeanhandler() {
QueryRunner queryRunner=new QueryRunner();
Connection connection = JDBCTools.getConnection();
String sql="select name,age,xiangbie xingbie,xuehao id from classes where name='xxx'";
try {
Persion query = queryRunner.query(connection, sql, new BeanHandler<Persion>(Persion.class));
System.out.println(query);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCTools.release(connection,null);
}
}
/**
* 测试查询方法MapHandler
* 返回sql对应的第一条记录对应的map对象;
* map中key是列的名字(不是别名)
*/
public void testMapHandler(){
Connection connection = null;
QueryRunner queryRunner = new QueryRunner();
String sql="select * from classes where name='xxx'";
try {
connection = JDBCTools.getConnection();
Map<String, Object> map = queryRunner.query(connection,
sql, new MapHandler());
System.out.println(map);
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.release(connection,null);
}
}
/**
* 测试查询方法MapHandler
* map中key是列的名字(不是别名)
*/
public void testMapListHandler(){
Connection connection = null;
QueryRunner queryRunner = new QueryRunner();
String sql="select * from classes where name='xxx'";
try {
connection = JDBCTools.getConnection();
List<Map<String, Object>> query = queryRunner.query(connection,
sql, new MapListHandler());
System.out.println(query);
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.release(connection,null);
}
}
/**
* ScalarHandler: 可以返回指定列的一个值或返回一个统计函数的值.
* 如果是多列的话,默认返回第一列的值;
*/
public void testScalarHandler(){
Connection connection = null;
QueryRunner queryRunner = new QueryRunner();
String sql="select xuehao from classes where name='xxx'";
try {
connection = JDBCTools.getConnection();
Object count = queryRunner.query(connection, sql,
new ScalarHandler());
System.out.println(count);//输出的是xuehao;
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.release(connection,null);
}
}
}