Browse Source

update for oracle print sql

yuxiaobin 8 năm trước cách đây
mục cha
commit
f7f5730db2

+ 29 - 2
src/main/java/com/baomidou/mybatisplus/plugins/PerformanceInterceptor.java

@@ -15,6 +15,7 @@
  */
 package com.baomidou.mybatisplus.plugins;
 
+import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.sql.Statement;
 import java.util.Properties;
@@ -68,6 +69,8 @@ public class PerformanceInterceptor implements Interceptor {
      */
     private boolean writeInLog = false;
 
+    private Method oracleGetOriginalSqlMethod;
+
     public Object intercept(Invocation invocation) throws Throwable {
         Statement statement;
         Object firstArg = invocation.getArgs()[0];
@@ -83,8 +86,32 @@ public class PerformanceInterceptor implements Interceptor {
             // do nothing
         }
 
-        // 获取执行 SQL
-        String originalSql = statement.toString();
+        String originalSql = null;
+        String stmtClassName = statement.getClass().getName();
+        if("oracle.jdbc.driver.T4CPreparedStatement".equals(stmtClassName)){
+            try {
+                if(oracleGetOriginalSqlMethod!=null){
+                    Object stmtSql = oracleGetOriginalSqlMethod.invoke(statement);
+                    if (stmtSql != null && stmtSql instanceof String) {
+                        originalSql = (String) stmtSql;
+                    }
+                }else {
+                    Class<?> clazz = Class.forName("oracle.jdbc.driver.OracleStatement");
+                    oracleGetOriginalSqlMethod = clazz.getDeclaredMethod("getOriginalSql", null);
+                    if (oracleGetOriginalSqlMethod != null) {
+                        Object stmtSql = oracleGetOriginalSqlMethod.invoke(statement);
+                        if (stmtSql != null && stmtSql instanceof String) {
+                            originalSql = (String) stmtSql;
+                        }
+                    }
+                }
+            } catch (Exception e) {//ignore
+            }
+        }
+        if(originalSql==null){
+            originalSql = statement.toString();
+        }
+
         int index = originalSql.indexOf(':');
         if (index > 0) {
             originalSql = originalSql.substring(index + 1, originalSql.length());