/* 获取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();
}
}
}
是不是很爽啊,:)