利用ThreadLocal简化struts开发

类别:Java 点击:0 评论:0 推荐:

/* 获取connection 对象* /
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import oracle.jdbc.driver.OracleDriver;

/**
 * @author sfluo
 *
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class DBUtil {

 public static Connection conn;

 public static Connection getConnection() {

  try {

   DriverManager.registerDriver(new OracleDriver());
   conn = DriverManager.getConnection(
     "jdbc:oracle:thin:@10.100.143.161:1521:gb02", "gib", "gib");
  } catch (SQLException e) {
   e.printStackTrace();
  }

  return conn;
 }

}

利用ThreadLocal保存connection对象
package conn;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * @author sfluo
 *
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class ConnectionManage {
 private static ThreadLocal currentConn = new ThreadLocal();

 public static Connection currentConnection() {

  Connection conn = (Connection) currentConn.get();
  if (conn == null) {
   conn = DBUtil.getConnection();
   currentConn.set(conn);
   openTransaction();
  }
  return conn;
 }

 public static void closeConnection() {
  try {
   Connection conn = (Connection) currentConn.get();
   currentConn.set(null);
   if (conn != null) {
    conn.close();
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

 public static void openTransaction() {
  try {
   Connection conn = currentConnection();
   conn.setAutoCommit(false);
   conn.setTransactionIsolation(2);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

 public static void commit() {
  try {
   Connection conn = currentConnection();
   if (conn != null)
    conn.commit();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

 public static void roolback() {
  try {
   Connection conn = currentConnection();
   if (conn != null)
    conn.rollback();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

}

被简化的dao实现
package conn;


import java.sql.PreparedStatement;

/**
 * @author sfluo
 *
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class DaoA {


 public static final String sql = "insert into t_user_bnas (id_globalsession,id_dispseq) values('11200409220000001279','1100')";

 void createData() throws Exception {
  PreparedStatement pstmt = ConnectionManage.currentConnection().prepareStatement(sql);

  pstmt.execute();

  pstmt.close();

 }

}

package conn;

import java.sql.Connection;
import java.sql.PreparedStatement;

/**
 * @author sfluo
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class DaoB {
 Connection conn;

 DaoB() {
  this.conn = ConnectionManage.currentConnection();
 }

 public static final String sql = "update t_user_bnas set id_1dispseq='1111' where id_globalsession='11200409220000001279'";

 void createData() throws Exception {
  PreparedStatement pstmt = conn.prepareStatement(sql);

  pstmt.execute();

  pstmt.close();
  

 }
}
测试例子
package conn;

/**
 * @author sfluo
 *
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class Test {

 public static void main(String args[]) {
  Test test = new Test();
  test.testMethod();
 }

 DaoA daoA = new DaoA();

 DaoB daoB = new DaoB();

 void testMethod() {

  try {

   daoA.createData();
   daoB.createData();
  } catch (Exception e) {

   ConnectionManage.roolback();

  } finally {
   ConnectionManage.closeConnection();

  }
 }

}
是不是很爽啊,:)

本文地址:http://com.8s8s.com/it/it13433.htm