代码 :
复制代码代码如下:
пакет 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 {
Приватный окончательный статический Threadlocal <Neply> conns = new Threadlocal <Connection> ();
Частный статический логический 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 ()))?
new _debugconnection (conn) .getConnection (): conn;
}
/**
* 关闭连接
*/
public final static void closeConnection () {
Соединение conn = (соединение) conns.get ();
пытаться {
if (conn! = null &&! conn.isclosed ()) {
conn.setautocommit (true);
conn.close ();
}
} catch (sqlexception e) {
}
conns.set (null);
}
/**
* 用于跟踪执行的 SQL 语句
*/
Статический класс _debugconnection реализует vocationhandler {
частное соединение conn = null;
public _debugconnection (connection conn) {
this.conn = conn;
}
public connection getConnection () {
return (connection) proxy.newproxyinstance (conn.getClass (). getClassLoader (), новый класс [] {connection.class}, это);
}
Общественный объект invoke (Object Proxy, Method M, Object [] args) бросает бросание
{
пытаться
{
String Method = m.getName ();
if ("preparestatement". equals (method) || "
{
System.out.println (метод);
System.out.println (args [0]);
}
вернуть m.invoke (conn, args);
} catch (vococationTargetException e) {
бросить e.getTargetException ();
}
}
}
}
пакет com.lwj.test.proxy;
Импорт java.sql.connection;
Импорт java.sql.drivermanager;
открытый класс ConnectionProvider {
Public Static Connection GetConnection ()
{
Соединение Connection = NULL;
пытаться{
Class.forname ("oracle.jdbc.oracledriver"). Newinstance ();
Connection = DriverManager.getConnection ("JDBC: Oracle: Thin:@192.168.1.101: 1521: orcl", "Скотт", "Тигр");
} catch (Exception e) {
}
вернуть соединение;
}
}
пакет com.lwj.test.proxy;
Импорт java.sql.connection;
Импорт java.sql.preparedStatement;
импортировать java.sql.resultset;
Импорт java.sql.sqlexception;
Импорт java.sql.statement;
открытый класс Testmain {
Public Static Void Main (String [] args)
{
Соединение conn = null;
Утверждение stmt = null;
Подготовленное Statatement pstmt = null;
пытаться
{
conn = dbmanager.getConnection ();
stmt = conn.createStatement (resultset.type_scroll_sensity, resultset.concur_updatable);
stmt.executeupdate («Вставка в тест1 (идентификатор, имя, карта, возраст, адрес) значения (9, 'liuwj', '1234567890988777', 24, 'hubeitianmen')") ");
/*pstmt = conn.prepareStatement («Вставка в тест1 (идентификатор, имя, карта, возраст, адрес) значения (?,?,?,?,?)»);
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 ("вставьте в тест1 (идентификатор, имя, карта, возраст, адрес) значения (?,?,?,?)");
PSTMT.SetString (1, "10");
PSTMT.SetString (2, "liuwj2");
PSTMT.SetString (3, "1234567890988777");
PSTMT.SetString (4, "22");
PSTMT.SetString (5, "123456");
pstmt.execute ();
才能打印出 SQL 语句。