代码:
复制代码代码如下:
แพ็คเกจ 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 Final Static threadLocal <การเชื่อมต่อ> conns = new ThreadLocal <การเชื่อมต่อ> ();
บูลีนคงที่ส่วนตัว show_sql = true;
การเชื่อมต่อคงที่สาธารณะสุดท้าย getConnection () พ่น sqlexception {
การเชื่อมต่อ conn = (การเชื่อมต่อ) conns.get ();
if (conn == null || conn.isclosed ()) {
// 这里使用我定义的一个简单的 ConnectionProvider 替代 DataSource 获取การเชื่อมต่อ
Conn = ConnectionProvider.getConnection ();
conns.set (conn);
-
return (show_sql &&! proxy.isproxyclass (conn.getClass ()))?
ใหม่ _debugConnection (conn) .getConnection (): conn;
-
-
* 关闭连接
-
สาธารณะสุดท้ายคงที่สาธารณะ closeconnection () {
การเชื่อมต่อ conn = (การเชื่อมต่อ) conns.get ();
พยายาม {
if (conn! = null &&! conn.isclosed ()) {
conn.setautocommit (จริง);
conn.close ();
-
} catch (sqlexception e) {
-
conns.set (null);
-
-
* 用于跟踪执行的 SQL 语句
-
คลาสคงที่ _debugconnection ใช้งาน InvocationHandler {
การเชื่อมต่อส่วนตัว conn = null;
สาธารณะ _debugconnection (Connection Conn) {
this.conn = conn;
-
การเชื่อมต่อสาธารณะ getConnection () {
return (การเชื่อมต่อ) proxy.newproxyinstance (conn.getClass (). getClassLoader (), คลาสใหม่ [] {connection.class}, สิ่งนี้);
-
วัตถุสาธารณะเรียกใช้ (พร็อกซีวัตถุ, เมธอด m, วัตถุ [] args) โยนได้
-
พยายาม
-
วิธีสตริง = m.getName ();
if ("preperestatement" .Equals (วิธีการ) || "createstatement" .equals (วิธีการ))
-
System.out.println (วิธีการ);
System.out.println (args [0]);
-
กลับมา m.invoke (conn, args);
} catch (InvocationTargetException e) {
โยน e.getTargetException ();
-
-
-
-
แพ็คเกจ com.lwj.test.proxy;
นำเข้า java.sql.connection;
นำเข้า java.sql.drivermanager;
คลาสสาธารณะ ConnectionProvider {
การเชื่อมต่อแบบคงที่สาธารณะ getConnection ()
-
การเชื่อมต่อการเชื่อมต่อ = null;
พยายาม{
class.forname ("oracle.jdbc.oracledriver"). newinstance ();
การเชื่อมต่อ = DriverManager.getConnection ("JDBC: Oracle: Thin:@192.168.1.101: 1521: ORCL", "Scott", "Tiger");
} catch (Exception 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 = null;
PreparedStatement PSTMT = NULL;
พยายาม
-
conn = dbmanager.getConnection ();
stmt = conn.createstatement (resultset.type_scroll_sensitive, resultet.curcur_updatable);
stmt.executeUpdate ("แทรกลงใน test1 (id, ชื่อ, การ์ด, อายุ, ที่อยู่) ค่า (9, 'liuwj', '1234567890988777', 24, 'Hubeitianmen')");
/*pstmt = conn.preparestatement ("แทรกลงใน test1 (id, ชื่อ, การ์ด, อายุ, ที่อยู่) ค่า (?,?,?,?,?)");
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 = null;
-
} catch (sqlexception e) {
-
dbmanager.closeconnection ();
-
-
-
论坛上看到用下列语句:
复制代码代码如下:
pstmt = conn.prepareStatement ("แทรกลงใน 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 语句。