DBManager
2205 ワード
public class DBManager {
private final static ThreadLocal<Connection> conns = new ThreadLocal<Connection>();
public final static Connection getConnection() throws SQLException {
Connection conn = (Connection) conns.get();
if (conn == null || conn.isClosed()) {
conn = ConnectionProvider.getConnection();
conns.set(conn);
}
return new _DebugConnection(conn).getConnection();
}
public final static void closeConnection() {
Connection conn = (Connection) conns.get();
try {
if (conn != null && !conn.isClosed()) {
conn.setAutoCommit(true);
conn.close();
}
} catch (SQLException e) {
}
conns.set(null);
}
static class _DebugConnection implements InvocationHandler {
private Connection conn = null;
public _DebugConnection(Connection conn) {
this.conn = conn;
}
public Connection getConnection() {
return (Connection) Proxy.newProxyInstance(conn.getClass()
.getClassLoader(), new Class[] { Connection.class }, this);
}
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable {
try {
String method = m.getName();
if ("prepareStatement".equals(method)
|| "createStatement".equals(method)) {
System.out.println(method);
System.out.println(args[0]);
}
return m.invoke(conn, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
}
}
}
static class ConnectionProvider {
public static Connection getConnection() {
Connection connection = null;
try {
Class.forName("oracle.jdbc.OracleDriver").newInstance();
connection = DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.0.32:1521:orcl", "omc",
"omc");
} catch (Exception e) {
}
return connection;
}
}
}