代码 :
复制代码代码如下::
Paket com.lwj.test.proxy;
Import Java.lang.reflect.InvocationHandler;
importieren java.lang.reflect.invocationTargetException;
import Java.lang.reflect.Method;
importieren java.lang.reflect.proxy;
Import Java.sql.Connection;
importieren java.sql.sqlexception;
öffentliche Klasse DBMANAGER {
private endgültige statische ThreadLocal <Connection> conns = new ThreadLocal <Connection> ();
private static boolean show_sql = true;
öffentliche endgültige statische Verbindung getConnection () löst SQLEXception {aus
Verbindung conn = (Verbindung) conns.get ();
if (conn == null || conn.isclosed ()) {
// 这里使用我定义的一个简单的 ConnectionProvider 替代 DataSource 获取 Verbindung
conn = ConnectionProvider.getConnection ();
conns.set (conn);
}
return (show_sql &&! proxy.isproxyclass (conn.getClass ()))?
new _debugConnection (conn) .getConnection (): conn;
}
/**
* 关闭连接
*/
öffentliche endgültige statische void Closeconnection () {
Verbindung conn = (Verbindung) conns.get ();
versuchen {
if (conn! = null &&! conn.isclosed ()) {
conn.setAutocommit (true);
conn.close ();
}
} catch (sqlexception e) {
}
conns.set (null);
}
/**
* 用于跟踪执行的 sql 语句
*/
Statische Klasse _debugConnection implementiert InvocationHandler {
private Verbindung conn = null;
public _debugConnection (Verbindung conn) {
this.conn = conn;
}
öffentliche Verbindung getConnection () {
return (Verbindung) proxy.newproxyInstance (conn.getClass (). getClassloader (), neue Klasse [] {Connection.class}, this);
}
öffentliches Objekt aufrufen (Object Proxy, Methode M, Object [] args) wirft Throwable ab
{
versuchen
{
String method = M.GetName ();
if ("Vorbereitungen" .Equals (Methode) || "Createstatement" .Equals (Methode))
{
System.out.println (Methode);
System.out.println (args [0]);
}
Return M.Invoke (Conn, Args);
} catch (invocationTargetException e) {
throw e.gettargetException ();
}
}
}
}
Paket com.lwj.test.proxy;
Import Java.sql.Connection;
importieren java.sql.drivermanager;
öffentliche Klasse ConnectionProvider {
öffentliche statische Verbindung getConnection ()
{
Verbindungsverbindung = null;
versuchen{
Class.forname ("oracle.jdbc.oracledriver"). NewInstance ();
connection = driverManager.getConnection ("JDBC: Oracle: Thin:@192.168.1.101: 1521: ORCL", "Scott", "Tiger");
} catch (Ausnahme e) {
}
Rückgabeverbindung;
}
}
Paket com.lwj.test.proxy;
Import Java.sql.Connection;
importieren java.sql.preeParedStatement;
importieren java.sql.resultset;
importieren java.sql.sqlexception;
importieren java.sql.statement;
öffentliche Klasse testmain {
öffentliche statische Leere Main (String [] Args)
{
Verbindung conn = null;
Aussage STMT = NULL;
PrepedStatement pstmt = null;
versuchen
{
conn = dbmanager.getConnection ();
STMT = Conn.CreateStatement (resultset.type_scroll_sensitive, resultset.concur_updatable);
stmt.executeUpdate ("In test1 einfügen (ID, Name, Karte, Alter, Adresse) Werte (9, 'liuwj', '1234567890988777', 24, 'Hubeitianmen'));
/*pstmt = conn.preparestatement ("In Test1 einfügen1 (ID, Name, Karte, Alter, Adresse) Werte (?,?,?,?,?)");
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) {
}Endlich{
versuchen{
if (pstmt! = null) {
pstmt.close ();
pstmt = null;
}
} catch (sqlexception e) {
}
DbManager.closeConnection ();
}
}
}
论坛上看到用下列语句 :
复制代码代码如下::
pstmt = conn.preparestatement ("In test1 einfügen (ID, Name, Karte, Alter, Adresse) Werte (?,?,?,?,?)");
pstmt.setstring (1, "10");
pstmt.setstring (2, "liuwj2");
pstmt.setstring (3, "1234567890988777");
pstmt.setstring (4, "22");
pstmt.setstring (5, "123456");
pstmt.execute ();
才能打印出 sql 语句。