设为首页 收藏本站
查看: 634|回复: 0

[经验分享] apache--dbutils的使用

[复制链接]

尚未签到

发表于 2017-1-2 10:30:45 | 显示全部楼层 |阅读模式
  apache的dbutils是一个开源的JDBC工具类,由于它是对JDBC只进行简单的封装,所以基本上不会影响到程序的性能。
  对于使用jdbc的程序来说,无疑dbutils能极大地简化jdbc的编码工作量。
  首先要使用dbutils,就必须引入dbutils的jar包,可以到apache的官网去下载,这里就不多说了。
  下面对其中比较常用的几个类进行简单的介绍
  一、DbUtils ---工具类
  DbUtils提供了关闭连接,装载JDBC驱动程序等常规工作的工具类,通过查看其API可以发现里面的方法都死静态的。
  eg:
  1.public static void close(…) throws java.sql.SQLException
  DbUtils类提供了三个重载的关闭方法
  2.public static void closeQuietly(…)
  这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLException
  3.public static void commitAndCloseQuietly(Connection conn)
  用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常
  4.public static boolean loadDriver(java.lang.String driverClassName)
  这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException
  二、QueryRunner类
  QueryRunner简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量
  eg:
  1.构造方法
  a.默认的构造方法  
  需要控制事务时,使用这组方法
  b.有参的构造方法:new QueryRunner(javax.sql.DataSource dataSource)
  不需要控制事务用这组方法
  2.主要方法
  a.查询操作
  public Object query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
  public Object query(String sql, ResultSetHandler<T> rsh, Object... params)
  b.更新操作
  public int update(Connection conn, String sql, Object... params)
  public int update(String sql, Object... params)
  3.example demo
  

<span style="white-space:pre"></span>/**
* DBUtils方式实现增删改
* @throws SQLException
*/
@Test
public void add2() throws SQLException{
QueryRunner runner = new QueryRunner(new ComboPooledDataSource());
runner.update("update account set money=? where name=?", 888,"a");
}
/**
* 古老方法实现增删改功能
* --在进行增删改操作时,每次都不一样的只有sql语句和sql语句中的参数
*/
@Test
public void update1(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
ComboPooledDataSource source = new ComboPooledDataSource();
try{
conn = source.getConnection();
ps = conn.prepareStatement("update account set money=? where name=?");
ps.setDouble(1, 999);
ps.setString(2, "a");
ps.executeUpdate();
}catch (Exception e) {
e.printStackTrace();
}finally{
DbUtils.closeQuietly(conn, ps, rs);
}
}

4.模拟QueryRunner写自己的QueryRunner  

package com.jjyy.dbutils;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbutils.DbUtils;
public class SelfQueryRunner {
private DataSource source = null;
public SelfQueryRunner() {
}
public SelfQueryRunner(DataSource source) {
this.source = source;
}
public int update(String sql, Object... params) throws SQLException{
Connection conn = source.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
//--获取参数元数据,获取参数的个数
ParameterMetaData metaData = ps.getParameterMetaData();
int count = metaData.getParameterCount();
//--循环设置参数的值
for(int i=1;i<=count;i++){
ps.setObject(i, params[i-1]);
}
//--执行update操作
int num = ps.executeUpdate();
DbUtils.closeQuietly(conn, ps, null);
return num;
}
public <T> T query(String sql, MyResultSetHandler<T> rsh, Object... params)throws SQLException{
Connection conn = source.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
//--获取参数元数据,获知参数个数
ParameterMetaData metaData = ps.getParameterMetaData();
int count = metaData.getParameterCount();
//--循环设置参数
for(int i=1;i<=count;i++){
ps.setObject(i, params[i-1]);
}
//--执行查询获取结果集
ResultSet rs = ps.executeQuery();
//--回调处理结果集的逻辑
T t = rsh.handle(rs);
DbUtils.closeQuietly(conn, ps, rs);
return t;
}
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-322764-1-1.html 上篇帖子: Apache+OPENSSL+Tomcat配置 下篇帖子: Apache Rewrite 详解(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表