代码 :
复制代码代码如下:
paket com.lwj.test.proxy;
impor java.lang.reflect.invocationHandler;
impor java.lang.reflect.invocationTargetException;
impor java.lang.reflect.method;
impor java.lang.reflect.proxy;
impor java.sql.connection;
impor java.sql.sqlexception;
DBManager kelas publik {
Threadlocal final private final <nection> conns = Threadlocal baru <nection> ();
private static boolean show_sql = true;
Publik Final Static Connection GetConnection () melempar sqlexception {
Koneksi conn = (koneksi) conns.get ();
if (conn == null || conn.isclosed ()) {
// 这里使用我定义的一个简单的 ConnectionProvider 替代 DataSource 获取 Koneksi
Conn = ConnectionProvider.getConnection ();
Conns.set (Conn);
}
return (show_sql &&! proxy.isproxyclass (conn.getClass ()))?
_debugconnection baru (Conn) .getConnection (): conn;
}
/**
* 关闭连接
*/
public final static void closeConnection () {
Koneksi conn = (koneksi) conns.get ();
mencoba {
if (conn! = null &&! conn.isclosed ()) {
Conn.setAutocommit (true);
conn.close ();
}
} catch (sqlexception e) {
}
Conns.set (null);
}
/**
* 用于跟踪执行的 SQL 语句
*/
Kelas statis _debugconnection mengimplementasikan InvocationHandler {
koneksi pribadi conn = null;
publik _debugconnection (koneksi conn) {
this.conn = conn;
}
Koneksi publik getConnection () {
return (connection) proxy.newproxyInstance (conn.getClass (). getClassLoader (), kelas baru [] {connection.class}, this);
}
Invoke Objek Publik (Proxy Objek, Metode M, Object [] args) melempar yang bisa dilemparkan
{
mencoba
{
Metode String = m.getName ();
if ("persiapan" .Equals (Metode) || "createstatement" .Equals (Metode))
{
System.out.println (Metode);
System.out.println (args [0]);
}
return m.invoke (Conn, args);
} catch (InvocateTargetException e) {
lempar mis. GetSargetException ();
}
}
}
}
paket com.lwj.test.proxy;
impor java.sql.connection;
impor java.sql.driverManager;
Connection ConnectionProvider {
Koneksi Statis Publik GetConnection ()
{
Koneksi koneksi = null;
mencoba{
Class.forname ("oracle.jdbc.oracledriver"). Newinstance ();
koneksi = driverManager.getConnection ("jdbc: oracle: tipis:@192.168.1.101: 1521: orcl", "scott", "tiger");
} catch (Exception e) {
}
koneksi kembali;
}
}
paket com.lwj.test.proxy;
impor java.sql.connection;
impor java.sql.preparedstatement;
impor java.sql.Resultset;
impor java.sql.sqlexception;
impor java.sql.statement;
TestMain kelas publik {
public static void main (string [] args)
{
Koneksi conn = null;
Pernyataan stmt = null;
PSTMT Persiapan PSTMT = NULL;
mencoba
{
conn = dbManager.getConnection ();
stmt = conn.createStatement (resultet.type_scroll_sensitive, resultet.concur_updatable);
stmt.executeUpdate ("masukkan ke dalam test1 (id, nama, kartu, usia, alamat) nilai (9, 'liuwj', '1234567890988777', 24, 'hubeitianmen')");
/*pstmt = conn.prepareStateMent ("masukkan ke test1 (id, nama, kartu, usia, alamat) nilai (?,?,?,?,?)");
pstmt.setstring (1, "10");
pstmt.setstring (2, "liuwj2");
PSTMT.Setstring (3, "1234567890988777");
pstmt.setstring (4, "22");
pstmt.setstring (5, "123456");
PSTMT.Execute ();*/
} catch (sqlexception e) {
}Akhirnya{
mencoba{
if (pstmt! = null) {
pstmt.close ();
PSTMT = NULL;
}
} catch (sqlexception e) {
}
DbManager.closeconnection ();
}
}
}
论坛上看到用下列语句 :
复制代码代码如下:
PSTMT = Conn.PrepareStatement ("Sisipkan ke Test1 (ID, Nama, Kartu, Usia, Alamat) Nilai (?,?,?,?,?)");
pstmt.setstring (1, "10");
pstmt.setstring (2, "liuwj2");
PSTMT.Setstring (3, "1234567890988777");
pstmt.setstring (4, "22");
pstmt.setstring (5, "123456");
PSTMT.Execute ();
才能打印出 SQL 语句。