激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - java跟蹤執行的sql語句示例分享

java跟蹤執行的sql語句示例分享

2019-11-16 14:05java教程網 JAVA教程

這篇文章主要介紹了java跟蹤執行的sql語句示例分享,需要的朋友可以參考下

代碼:

復制代碼代碼如下:


package com.lwj.test.proxy;

 

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import java.sql.SQLException;

public class DBManager {
    private final static ThreadLocal<Connection> conns = new ThreadLocal<Connection>();
    private static boolean show_sql = true;   

    public final static Connection getConnection() throws SQLException {   
        Connection conn = (Connection) conns.get();   
        if(conn ==null || conn.isClosed()){   
            // 這里使用我定義的一個簡單的 ConnectionProvider 替代 dataSource 獲取Connection   
            conn = ConnectionProvider.getConnection();   
            conns.set(conn);   
        }   
        return (show_sql && !Proxy.isProxyClass(conn.getClass()))?   
                      new _DebugConnection(conn).getConnection():conn;   
    }   

    /**  
     * 關閉連接  
     */  
    public final static void closeConnection() {   
        Connection conn = (Connection) conns.get();   
        try {   
            if(conn != null && !conn.isClosed()){   
                conn.setAutoCommit(true);   
                conn.close();   
            }   
        } catch (SQLException e) {   
        }   
        conns.set(null);   
    }   

    /**  
     * 用于跟蹤執行的SQL語句  
     */  
    static class _DebugConnection implements InvocationHandler {   
        private Connection conn = null;

        public _DebugConnection(Connection conn) {   
            this.conn = conn;
        }
        public Connection getConnection() {   
            return (Connection) Proxy.newProxyInstance(conn.getClass().getClassLoader(),new Class[]{Connection.class}, this);
        }
        public Object invoke(Object proxy, Method m, Object[] args) throws Throwable    
        {   
            try    
            {   
                String method = m.getName();   
                if("prepareStatement".equals(method) || "createStatement".equals(method))   
                {
                    System.out.println(method);
                    System.out.println(args[0]);
                }   
                return m.invoke(conn, args); 
            } catch (InvocationTargetException e) {   
                throw e.getTargetException();   
            }   
        }   
    } 
}

package com.lwj.test.proxy;

import java.sql.Connection;
import java.sql.DriverManager;

public class ConnectionProvider {
 public static Connection getConnection()   
    {
  Connection connection = null;
       try{   

           Class.forName("oracle.jdbc.OracleDriver").newInstance();   
           connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.101:1521:orcl", "scott", "tiger");
       }catch(Exception e){   
       }
       return connection;
    }
}

package com.lwj.test.proxy;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestMain {

 public static void main( String[] args )   
    {   
            Connection conn = null;   
            Statement stmt = null;
            PreparedStatement pstmt = null;
            try  
            {   
                conn = DBManager.getConnection();

                stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);   
                stmt.executeUpdate( "insert into test1(id,name,card,age,address) values(9,'liuwj','1234567890988777',24,'hubeitianmen')" );   

                /*pstmt = conn.prepareStatement( "insert into test1(id,name,card,age,address) values(?,?,?,?,?)"); 
                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){   

            }finally{   
                 try{   
                   if( pstmt != null ){   
                    pstmt.close();   
                    pstmt = null;       
                   }   
                 }catch(SQLException e){   

                 }    

                 DBManager.closeConnection();   
            }     
    }
}

 

論壇上看到用下列語句:

復制代碼代碼如下:

pstmt = conn.prepareStatement( "insert into test1(id,name,card,age,address) values(?,?,?,?,?)"); 
pstmt.setString(1, "10");
pstmt.setString(2, "liuwj2");
pstmt.setString(3, "1234567890988777");
pstmt.setString(4, "22");
pstmt.setString(5, "123456");
pstmt.execute();

 

才能打印出sql語句

延伸 · 閱讀

精彩推薦
427
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 黄色大片在线免费观看 | 国产一级做a | 玩偶姐姐 在线观看 | 一级黄色免费大片 | 久久99精品视频在线观看 | 欧美一区二区三区四区五区动图 | 日韩激情一区 | av影片在线观看 | 欧美性受xxxxxx黑人xyx性爽 | 国产精品久久久久久久av三级 | 成av在线| 99精品视频久久精品视频 | 欧美一级黄 | 羞羞视频免费观看入口 | 欧洲黄色一级视频 | 日本一区二区免费在线观看 | 中国杭州少妇xxxx做受 | 97久久人人超碰caoprom | 欧洲成人综合网 | 日本高清com| 久久久精品精品 | 久久激情国产 | 久久久久久久久久91 | 国产人妖一区二区 | 国产午夜精品久久久久久免费视 | 日本视频网 | 美女喷水网站 | 毛片视频大全 | 成人免费看视频 | 国产成人高清成人av片在线看 | 久久久久久久久久久久久九 | www国产成人免费观看视频 | 一级做受毛片免费大片 | 久国产精品| 成人视屏在线 | 成人免费观看毛片 | 国产精品欧美日韩一区二区 | 网站激情 | 港台三级在线观看 | 性少妇videosexfreexxx片 | 欧美亚洲国产日韩 |