首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

开发过程中事宜控制

2013-01-08 
开发过程中事务控制一、在JDBC连接中开启事务,调用完成后关闭连接(传统方式不推荐使用)private static Data

开发过程中事务控制

一、在JDBC连接中开启事务,调用完成后关闭连接(传统方式不推荐使用)

private static DataSource ds;static{try{Properties prop = new Properties();InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");prop.load(in);BasicDataSourceFactory factory = new BasicDataSourceFactory();ds = factory.createDataSource(prop);}catch (Exception e) {throw new ExceptionInInitializerError(e);}}public void transfer() throws SQLException{Connection conn = null;try{conn = JdbcUtils.getConnection();conn.setAutoCommit(false);//对数据进行操作conn.commit();}finally{if(conn!=null) conn.close();}}

?二、用ThreadLocal类在线程上绑定一个连接

private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();

?在获得连接的时候就绑定到threadLocal 上

public static Connection getConnection() throws SQLException{try{//得到当前线程上绑定的连接Connection conn = threadLocal.get();if(conn==null){  //代表线程上没有绑定连接conn = ds.getConnection();threadLocal.set(conn);}return conn;}catch (Exception e) {throw new RuntimeException(e);}}

?然后开启事务

public static void startTransaction(){try{//得到当前线程上绑定连接开启事务Connection conn = threadLocal.get();if(conn==null){  //代表线程上没有绑定连接conn = ds.getConnection();threadLocal.set(conn);}conn.setAutoCommit(false);}catch (Exception e) {throw new RuntimeException(e);}}

?

执行完相应操作后提交事务

public static void commitTransaction(){try{Connection conn = threadLocal.get();if(conn!=null){conn.commit();}}catch (Exception e) {throw new RuntimeException(e);}}

?

最后关闭连接

public static void closeConnection(){try{Connection conn = threadLocal.get();if(conn!=null){conn.close();}}catch (Exception e) {throw new RuntimeException(e);}finally{//千万注意,解除当前线程上绑定的链接(从threadlocal容器中移除对应当前线程的链接)threadLocal.remove();   }}

?

?第三种方法是用spring中的事务管理器,本次不做讨论

热点排行