JDBCUtils 工具类
来源:互联网 发布:2017网络新歌排行榜 编辑:程序博客网 时间:2024/06/11 06:55
/**
本博客由马瘦风整理并发布,创作不易,转载请注明出处:
http://blog.csdn.net/ma_shou_feng
*/
1. 工具类设计细节
1.1 关于异常:
工具类是为开发提供便捷而设计的,若工具类内部出现异常,最好是将异常抛出,强迫调用者去处理,否则出现问题很难发现。
——告诉调用者,将要使用的方法有可能出现问题。
虽说抛出运行时异常,调用者可处理也可不处理,更加灵活,但这无形中增加了程序的维护难度。
1.2 具体实践细节:
一般的工具类都没有必要被继承,因此加上 final 属性:
public final class XxxUtil{...}同样的,工具类被实例化的需求也并不多见,故将其构造方法私有化:private XxxUtil(){};
2. JDBCUtils 的具体实现
/** * JDBC 工具类 * @author healchow */ public final class JDBCUtils { // 创建私有的静态线程局部类对象,确保线程与 Connection 对象绑定在一起 private static ThreadLocal<Connection> local = new ThreadLocal<Connection>(); // 创建私有的公共静态数据源对象 private static DataSource dataSource = new ComboPooledDataSource(); /** * 不允许创建工具类实例 */ private JDBCUtils() {} /** * 获取数据源对象 * @return DataSource对象 */ public static DataSource getDataSource() { return dataSource; } /** * 获取连接对象 * @return Connection对象 */ public static Connection getConnection() { try { // 从线程局部类对象中获取连接对象 Connection conn = local.get(); // 如果没有获取到,则新创建一个连接对象 if (conn == null) { // 新建连接对象,并将其添加至线程局部对象 conn = dataSource.getConnection(); local.set(conn); } return conn; } catch (SQLException e) { //将编译时异常转换为运行时异常 throw new RuntimeException(e); } } /** * 开启事务 */ public static void beginTransaction() { try { //调用本类方法获取连接对象 Connection conn = getConnection(); if(conn != null) { conn.setAutoCommit(false); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(); } } /** * 提交事务 */ public static void commitAndRelease() { try { //提交事务,并关闭连接对象 Connection conn = getConnection(); if(conn != null) { conn.commit(); conn.close(); //将连接对象从 local 中移除 local.remove(); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 回滚事务 */ public static void rollbackAndRelease() { try { // 回滚事务,并关闭连接对象 Connection conn = getConnection(); //DbUtils.rollbackAndCloseQuietly(conn); if(conn != null) { conn.rollback(); conn.close(); //将连接对象从 local 中移除 local.remove(); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 关闭各类资源 * @param rs * @param stmt * @param conn */ public static void close(ResultSet rs, Statement stmt, Connection conn) { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } // 关闭资源(只关Statement 和 Connection) public static void close(Statement stmt, Connection conn) { close(null, stmt, conn); } //关闭资源(只关Connection) public static void close(Connection conn) { close(null, null, conn); }}
阅读全文
0 0
- Java工具类-JdbcUtils
- 工具类JdbcUtils
- JDBCUtils工具类
- JdbcUtils工具类
- JDBCUtils 工具类
- JdbcUtils工具类
- JDBCUtils 工具类
- JDBCUtils工具类
- c3p0工具jdbcutils工具类模板
- JDBC:编写通用的 JDBCUtils工具类
- 使用工具类来简化代码JDBCUtils
- 使用工具类来简化代码JDBCUtils
- 使用工具类来简化代码JDBCUtils
- Java学习篇之JDBCUtils工具类
- JdbcUtils工具类(c3p0+DbUtils优化)
- JdbcUtils工具的抽取
- 使用 c3p0 连接池 改造 jdbcutils工具类
- C3P0组件+DbUtils组件实现一个JdbcUtils工具类
- 做机梦,
- 兄弟连学python》》》元组操作
- scrapy爬取酒店信息
- 逻辑英语_1
- VTK 表面重建-三角剖分
- JDBCUtils 工具类
- 输入3个从小到大的数,并按从大到小的顺序输出
- vuejs2.0实现分页组件,使用$emit进行事件监听数据传递
- NumPy 创建多维数组
- 用lasso回归进行房价预测
- 剑指offer—按之字形顺序打印二叉树
- JSON介绍
- Android之ListView的getItemViewType和getViewTypeCount
- MOOC清华《VC++面向对象与可视化程序设计》第5章:位图资源例程