DbUtils使用说明
来源:互联网 发布:node.js适用场景 编辑:程序博客网 时间:2024/05/16 17:14
基本用法
DbUtils是一个小巧的类库,在DbUtils中QueryRunner和ResultSetHandler是最核心的类和接口。 你不需要了解更多的其它类,下面的例子将展示怎样使用这个工具。
// 创建ResultSetHandler的实现类转换一行数据到Object[]。
ResultSetHandler<Object[]> h = new ResultSetHandler<Object[]>() {
public Object[] handle(ResultSet rs) throws SQLException {
if (!rs.next()) {
return null;
}
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
Object[] result = new Object[cols];
for (int i = 0; i < cols; i++) {
result[i] = rs.getObject(i + 1);
}
return result;
}
};
//通过DataSource获取的连接创建QueryRunnerQueryRunner run = new QueryRunner(dataSource);
// 执行查询并从处理器获取处理结果
Object[] result = run.query("SELECT * FROM USER WHERE NAME=?", h, "wesson");
你也可以通过使用传统的 java.sql.Connection 对象代替 DataSource。注意你需要负责关闭Connection对象。
ResultSetHandler<Object[]> h=...// 和上面例子一样定义一个处理器
// 没有DataSource对象,我们必须手工处理Connections连接
QueryRunner run=newQueryRunner();
Connection conn =...// 打开连接
try{
Object[] result= run.query(conn,"SELECT * FROM USER WHERE NAME=?", h,"wesson");
// 处理查询结果
} finally{
// 采用工具类的方法关闭连接,我们不用检查连接是否为空。
DbUtils.close(conn);
}
你不光能够查询数据,还能够插入和修改数据。
QueryRunner run = new QueryRunner( dataSource );
try
{
// 执行SQL更新并返回插入数据的条数。
int inserts = run.update( "INSERT INTO USER (NAME,PWD) VALUES (?,?)","jacky","123456");
// 更新数据
int updates = run.update( "UPDATE USER SET PWD=? WHERE NAME=?","654321", "jacky");
}
catch(SQLException sqle) {
// 异常处理
}
对于长时间调用可以使用AsyncQueryRunner进行异步方式调用。AsyncQueryRunner 类与QueryRunner类具有同样的方式,使用方式也一样,其返回一个Callable。
ExecutorCompletionService<Integer> executor =new ExecutorCompletionService<Integer>( Executors.newCachedThreadPool() );
AsyncQueryRunner asyncRun = new AsyncQueryRunner( dataSource );
try
{
//为更新调用创建一个Callable
Callable<Integer> callable = asyncRun.update( "UPDATE USER SET PWD=? WHERE NAME=?","654321", "jacky" );
//提交Callable到执行者
executor.submit( callable );
} catch(SQLException sqle) {
//处理异常
}
//过段时间后或者在其他线程中
try
{
//获取更新结果
Integer updates = executor.take().get();
} catch(InterruptedException ie) {
//处理异常
}
ResultSetHandler实现
在上面的例子我们实现了ResultSetHandler接口转换第一行ResultSet为Object[],这是一种通用的使用方法。在包org.apache.commons.dbutils.handlers中提供了许多ResultSetHandler的实现类将查询结果转换成arrays, Maps, and JavaBeans。
我们开始使用BeanHandler从ResultSet获取一条数据库并转换成JavaBean。
QueryRunner run = new QueryRunner(dataSource);
//使用BeanHandler实现转换第一条数据为User JavaBean。
ResultSetHandler<User> h = new BeanHandler<User>(User.class);
// 执行SQL,返回BeanHandler生成的User对象。
User u = run.query( "SELECT * FROM USER WHERE NAME=?", h, "jacky");
下面我们使用BeanListHandler获取所有数据对象。
QueryRunner run = new QueryRunner(dataSource);
// 使用BeanListHandler实现转换所有数据为User JavaBeans List对象。
ResultSetHandler<List<User>> h = new BeanListHandler<User>(User.class);
// 执行SQL语句
List<User> users = run.query("SELECT * FROM User", h
自定义RowProcessor
每一个ResultSetHandler实现类接受一个RowProcessor实现真正的数据转换。默认处理器使用的BasicRowProcessor实现,但是你可以实现自己的。通用的自定义实现都是实现toBean()方法。
自定义BeanProcessor
BasicRowProcessor使用BeanProcessor转换ResultSet列到JavaBean属性。你可以继承和覆盖处理数据类型到特定的应用。
BeanProcessor在BeanProcessor.toBean()中映射列到bean的属性。 列名必须匹配bean的属性名。例如, firstname 列在bean中对应setFirstName()方法。有些数据库的字段无法映射为指定的java方法
名,你可以采取以下方式进行映射:
1.在SQL中采取别名匹配java的名字: select name_test as nameTest from user。
2.继承BeanProcessor类并覆盖mapColumnsToProperties()方法去掉不需要的字符。
- dbutils使用说明。
- dbutils使用说明。
- DbUtils使用说明
- dbutils使用说明
- DbUtils使用说明
- apache commons DbUtils使用说明
- Common Dbutils使用说明
- Dbutils
- dbutils
- DbUtils
- DBUtils
- DBUtils
- DBUtils
- DBUtils
- DBUtils
- DBUtils
- Dbutils
- DBUtils
- C++Primer第三版0601
- 《php与mysql程序设计》读书笔记——张迅雷闪击PHP(10-12章)
- 用正则式取出String中的汉字
- BalckHat2010 Barnaby Jack演示ATM自动吐钱
- 归并排序 hdu 3743
- DbUtils使用说明
- 指针——苏嵌实训第9天
- build.xml文件生成客户端 CXF
- bt5 note [5] msf运用层攻击
- BootLoader的基本概念
- source 命令 && . 命令
- 代码大全学习-5
- 初めてのjQuery:セレクターAPIを一挙解説(後編)
- 2012.07.10