: :
复制代码代码如下:
حزمة com.lwj.test.proxy ؛
استيراد java.lang.reflect.invocationHandler ؛
استيراد java.lang.reflect.invocationTargetException ؛
استيراد java.lang.reflect.method ؛
استيراد java.lang.reflect.proxy ؛
استيراد java.sql.connection ؛
استيراد java.sql.sqlexception ؛
الطبقة العامة dbmanager {
private static static threadlocal <connection> conns = new threadlocal <Connection> () ؛
private static boolean show_sql = true ؛
الاتصال الثابت النهائي العام getConnection () يلقي sqlexception {
Connection conn = (connection) conns.get () ؛
if (conn == null || conn.isclosed ()) {
// 这里使用我定义的一个简单的 ConnectionProvider 替代 DataSource 获取 الاتصال
conn = connectionProvider.getConnection () ؛
conns.set (conn) ؛
}
العودة (show_sql &&! proxy.isproxyclass (conn.getClass ()))؟
جديد _debugconnection (conn) .getConnection (): conn ؛
}
/**
* 关闭连接
*/
Public Final Static Void CloseConnection () {
Connection conn = (connection) conns.get () ؛
يحاول {
if (conn! = null &&! conn.isclosed ()) {
conn.setautocommit (صواب) ؛
conn.close () ؛
}
} catch (sqlexception e) {
}
conns.set (null) ؛
}
/**
* 用于跟踪执行的 sql 语句
*/
فئة ثابتة _debugconnection تنفذ InvocationHandler {
اتصال خاص conn = null ؛
العام _debugconnection (اتصال conn) {
this.conn = conn ؛
}
الاتصال العام getConnection () {
return (اتصال) proxy.newproxyinstance (conn.getClass (). getClassloader () ، فئة جديدة [] {connection.class} ، هذا) ؛
}
الكائن العام يستدعي (وكيل الكائن ، الطريقة M ، كائن [] args) رمي رمي
{
يحاول
{
طريقة السلسلة = m.getName () ؛
إذا ("التحضير" .equals (الطريقة) || "الإبداع" .equals (الطريقة))
{
system.out.println (method) ؛
System.out.println (args [0]) ؛
}
Return M.Invoke (Conn ، Args) ؛
} catch (invocationTargetException e) {
رمي e.getTargetException () ؛
}
}
}
}
حزمة com.lwj.test.proxy ؛
استيراد java.sql.connection ؛
استيراد java.sql.drivermanager ؛
ConnectionProvider {Clost Classe {
الاتصال الثابت العام getConnection ()
{
اتصال الاتصال = فارغ ؛
يحاول{
class.forname ("oracle.jdbc.oracledriver"). newinstance () ؛
connection = drivermanager.getConnection ("JDBC: Oracle: Thin:@192.168.1.101: 1521: Orcl" ، "Scott" ، "Tiger") ؛
} catch (استثناء e) {
}
إرجاع اتصال
}
}
حزمة com.lwj.test.proxy ؛
استيراد java.sql.connection ؛
استيراد java.sql.preparedStatement ؛
استيراد java.sql.resultset ؛
استيراد java.sql.sqlexception ؛
استيراد java.sql.statement ؛
الفئة العامة testmain {
الفراغ الثابت العام (سلسلة [] args)
{
اتصال conn = null ؛
بيان stmt = فارغة ؛
ReparedStatement PSTMT = NULL ؛
يحاول
{
conn = dbmanager.getConnection () ؛
stmt = conn.createStatement (resultset.type_scroll_sensitive ، resultset.concur_updatable) ؛
stmt.executeupdate ("insert in test1 (id ، اسم ، البطاقة ، العمر ، العنوان) قيم (9 ، 'liuwj' ، '1234567890988777 ، 24 ،' Hubeitianmen ')") ؛
/*pStmt = conn.preparestatement ("insert in test1 (id ، name ، card ، end ، address) stable (؟ ،؟ ،؟ ،؟)") ؛
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) {
}أخيراً{
يحاول{
if (pstmt! = null) {
pstmt.close () ؛
PSTMT = فارغة ؛
}
} catch (sqlexception e) {
}
dbmanager.closeconnection () ؛
}
}
}
: :
复制代码代码如下:
PSTMT = conn.preparestatement ("insert in test1 (id ، اسم ، البطاقة ، العمر ، العنوان) قيم (؟ ،؟ ،؟ ،؟)") ؛
PSTMT.SetString (1 ، "10") ؛
pStmt.SetString (2 ، "liuwj2") ؛
PSTMT.SetString (3 ، "1234567890988777") ؛
PSTMT.SetString (4 ، "22") ؛
PSTMT.SetString (5 ، "123456") ؛
pstmt.execute () ؛
才能打印出 SQL 语句。