如何啟動JDBC Debug模式,打印JDBC診斷日志

jopen 10年前發布 | 15K 次閱讀 JDBC Java開發

1.下載Debug版本jar包</strong></span>

     首先要下載一個Debug版本的JDBC jar包,Debug版本的jar包命名形式為jdbcX_g.jar(如下圖所示),如Oracle11g的Debug版本的jar包為jdbc6_g.jar。點擊這里下載:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html 


2.啟動Logging模式
     第一種方式:設置運行環境變量java -Doracle.jdbc.Trace=true ...(elipse中run->run configurations->arguments一欄)
     第二種方式:在程序中控制(建議采用這種方式)
 
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();  
            String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");  
            ObjectName pattern = new ObjectName("com.oracle.jdbc:type=diagnosability,name=" + loader);  
            ObjectName diag = ((ObjectName[]) (mbs.queryNames(pattern, null).toArray(new ObjectName[0])))[0];  
            mbs.setAttribute(diag, new Attribute("LoggingEnabled", true));  
            System.out.println("LoggingEnabled = " + mbs.getAttribute(diag, "LoggingEnabled"));  
     如果用的是Oracle 10g,直接執行:
    /**oracle 10g 啟動方法*/  
                oracle.jdbc.driver.OracleLog.setTrace(true); // enable logging  
                oracle.jdbc.driver.OracleLog.setTrace(false); // disable logging  
3.配置log文件
jdbc使用的是java.util.logging包中的Logger對象打印log。
    /**配置log文件*/  
            Handler fh = new FileHandler("./oracle_jdbc_log.log");  
            fh.setLevel(Level.ALL);  
            fh.setFormatter(new SimpleFormatter());  
            Logger.getLogger("").addHandler(fh);  
            Logger.getLogger("").setLevel(Level.ALL);  
4.下面給大家一個完成的Demo
 
    import javax.management.Attribute;  
    import javax.management.AttributeNotFoundException;  
    import javax.management.InstanceNotFoundException;  
    import javax.management.InvalidAttributeValueException;  
    import javax.management.MBeanException;  
    import javax.management.MBeanServer;  
    import javax.management.MalformedObjectNameException;  
    import javax.management.ObjectName;  
    import javax.management.ReflectionException;  

    public void run() throws SQLException {  
            DriverManager.registerDriver(new OracleDriver());  
            //需在加載OracleDriver之后開啟log  
            enableOracleLogging();  
            Connection conn = null;  
            Statement stmt = null;  
            ResultSet rset = null;  
            try {  
                conn = getConnection();  
                System.out.println("Connection retrieved..");  
                stmt = conn.createStatement();  
                rset = stmt.executeQuery("select empno from emp");  
                while (rset.next()) {  
                    System.out.println(rset.getInt(1));  
                }  
            } catch (SQLException sqle) {  
                sqle.printStackTrace();  
            } finally {  
                if (rset != null) {  
                    rset.close();  
                }  
                if (stmt != null) {  
                    stmt.close();  
                }  
                if (conn != null) {  
                    conn.close();  
                }  
            }  
        }  
    public static void enableOracleLogging() {  
            try {  
                /** 配置log文件 */  
                Handler fh = new FileHandler("./oracle_jdbc_log.log");  
                fh.setLevel(Level.ALL);  
                fh.setFormatter(new SimpleFormatter());  
                Logger.getLogger("").addHandler(fh);  
                Logger.getLogger("").setLevel(Level.ALL);  
                /** oracle 11g 啟動方法 */  
                MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();  
                String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");  
                ObjectName pattern = new ObjectName("com.oracle.jdbc:type=diagnosability,name=" + loader);  
                ObjectName diag = ((ObjectName[]) (mbs.queryNames(pattern, null).toArray(new ObjectName[0])))[0];  
                mbs.setAttribute(diag, new Attribute("LoggingEnabled", true));  
                System.out.println("LoggingEnabled = " + mbs.getAttribute(diag, "LoggingEnabled"));  
                /** oracle 10g 啟動方法 */  
                // oracle.jdbc.driver.OracleLog.setTrace(true); // enable logging  
                // oracle.jdbc.driver.OracleLog.setTrace(false); // disable logging  

            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!