DBUtils学习笔记一DbUtils
来源:互联网 发布:淘宝账号怎么找回来 编辑:程序博客网 时间:2024/05/20 15:42
DBUtils包是apache commons的一个工具包,主要是用来对jdbc程序的补充与封装,通过简单封装让jdbc程序更简洁,使我们的程序更加的清晰。整个工具包只有不到30个类和接口,但是功能很强大,基本使我们避免了jdbc中的很多繁琐重复的代码,昨天对这个包中的源码进行了阅读与测试,下面对主要常用的API总结一下:
API docs图:
可见其中主要的两个接口ResultSetHandler和RowProcessor都是用来对查询结果记录进行处理的接口,包中很多类都是实现这两个接口来达到其功能的。
一、DbUtils类:
这个类中提供了很多关闭资源、简单事务提交与回滚、以及loadDriver的工具方法。这个类与平时我们自己写的DB工具类差不多,只是没有看到getConnection这样的方法。
- 关闭数据库资源方法
- 这类方法有两种:close与closeQuietly,每种都有多个重载的方法,源码很简单,就是对jdbc代码的简单封装:
public static void close(Connection conn) throws SQLException { if (conn != null) {//简单的判断非null、然后关闭 conn.close(); } }public static void closeQuietly(ResultSet rs) { try { close(rs); } catch (SQLException e) { // NOPMD // quiet 捕获异常什么也没做 } }
当然这类方法还支持同时关闭多个资源,包括connection、resultset、preparestatment等,使用了嵌套的try catche finally 来保证资源的关闭。
- 这类方法有两种:close与closeQuietly,每种都有多个重载的方法,源码很简单,就是对jdbc代码的简单封装:
- 简单事务操作方法
- 提交和回滚事务操作,都是简单的判断connection是否为空,执行相应的提交回滚操作,并关闭链接,像close方法一样这两个方法也有quietly的方法,操作类似:
public static void commitAndClose(Connection conn) throws SQLException { if (conn != null) { try { conn.commit(); } finally { conn.close(); } } }public static void rollbackAndClose(Connection conn) throws SQLException { if (conn != null) { try { conn.rollback(); } finally { conn.close(); } } }
- 提交和回滚事务操作,都是简单的判断connection是否为空,执行相应的提交回滚操作,并关闭链接,像close方法一样这两个方法也有quietly的方法,操作类似:
- 加载Driver方法
- loadDriver方法也有一个重载的实现,一个直接使用默认的加载器加载Driver另一个可以提供一个ClassLoader参数来加载Driver:
public static boolean loadDriver(String driverClassName) { return loadDriver(DbUtils.class.getClassLoader(), driverClassName); }public static boolean loadDriver(ClassLoader classLoader, String driverClassName) { try { Class<?> loadedClass = classLoader.loadClass(driverClassName); if (!Driver.class.isAssignableFrom(loadedClass)) { return false; } @SuppressWarnings("unchecked") // guarded by previous check Class<Driver> driverClass = (Class<Driver>) loadedClass; Constructor<Driver> driverConstructor = driverClass.getConstructor(); // make Constructor accessible if it is private boolean isConstructorAccessible = driverConstructor.isAccessible(); if (!isConstructorAccessible) { driverConstructor.setAccessible(true); } try { Driver driver = driverConstructor.newInstance();//通过反射的方式来创建Driver实例,调用了一个内部私有类来注册Driver registerDriver(new DriverProxy(driver)); } finally { driverConstructor.setAccessible(isConstructorAccessible); } return true; } catch (RuntimeException e) { return false; } catch (Exception e) { return false; } }
- loadDriver方法也有一个重载的实现,一个直接使用默认的加载器加载Driver另一个可以提供一个ClassLoader参数来加载Driver:
- 打印信息方法:
- 这些方法主要是用来打印异常信息的,可以指定输出的printwriter等,没做过多研究,没怎么使用过。
这个类可以与我们自己实现的一个DbTools类一起配合使用简化jdbc代码,这样基本的jdbc常用的功能就全了:
/** * Created by weiguang on 16-8-15. */public final class DbTools { private static final Logger logger = LoggerFactory.getLogger(DbTools.class); private static String username; private static String password; private static String jdbcUrl; private static String driverClass; static { InputStream in = DbTools.class.getClassLoader().getResourceAsStream("db.properties"); Properties props = new Properties(); try { props.load(in); } catch (IOException e) { logger.error("db.properties 文件加载失败!!", e); } username = props.getProperty("username"); password = props.getProperty("password"); jdbcUrl = props.getProperty("jdbcUrl"); driverClass = props.getProperty("driverClass");// 使用DBUtils包中的工具类避免捕获异常,是代码更整洁 DbUtils.loadDriver(driverClass); } public static Connection getConnection() { try { return DriverManager.getConnection(jdbcUrl, username, password); } catch (SQLException e) { logger.error("获取数据库链接失败!", e); } return null; }}
0 0
- DBUtils学习笔记一DbUtils
- DButils 工具学习笔记(一)
- DBUtils学习(一)
- DbUtils学习(一)
- DBUtils学习笔记
- DbUtils学习----DbUtils类
- 学习笔记之 DBUtils 组件
- DbUtils 笔记
- DbUtils学习
- DBUtils学习
- DBUtils学习
- Dbutils
- dbutils
- DbUtils
- DBUtils
- DBUtils
- DBUtils
- DBUtils
- 红黑树-java实现
- u-boot-2016.05移植:(2)、修改时钟 初始化sdram 重定位u-boot 配置smdk2440.h 修改u-boot.lds
- java框架篇---spring aop两种配置方式
- form表单post提交时中文乱码
- r语言中生成序列的函数
- DBUtils学习笔记一DbUtils
- HDU 5832 A water problem 【大数取模,Java 大数也不是万能的。。】
- Bitmap转Drawable
- JAVAString初始化的引用问题
- C++ cout执行顺序
- [leetcode] 376. Wiggle Subsequence
- 记一次shellcode提取经历
- C语言复制文件的两种简单的方法【从根本解决问题】
- android 获取版本号