在绑定Oracle jdbc驱动程序后打印preparedStatement SQL

时间:2013-09-10 13:48:11

标签: java oracle jdbc prepared-statement

我尝试了几个例子,但似乎都没有。这是我上次尝试的代码

 import oracle.jdbc.driver.OracleDriver;
 PreparedStatement prs = null;
 ResultSet rrs = null;
Class stmt1 = null;
java.lang.reflect.Field mem = null;

  requestSQL = "Select FIPS_STATE_CD_TXT, FIPS_COUNTY_CD_TXT from MSTR_FIPS_COUNTY where STATE_ID = ? " + " and COUNTY_TXT = ?";

    prs.setString(1, vPropertyState);
    prs.setString(2, vPropertyCounty);
    System.out.println(prs.toString()); //JRN
             Class stmt1 = prs.getClass();  
          java.lang.reflect.Field mem = stmt1.getField("sql");  
          String value= (String)mem.get(prs);  
          rrs = prs.executeQuery();

我在此处收到错误:

   Exception trying to make a TAF call
   java.lang.NoSuchFieldException: sql
    at java.lang.Class.getField(Class.java:1520)

我甚至尝试过使用JavaWorld中的这个例子,但我的编译器似乎没有识别DebugLevel和StatementFactory。我应该为此下载一个特殊的包吗? http://www.javaworld.com/javaworld/jw-01-2002/jw-0125-overpower.html?page=3

我使用的是Java 1.6和Oracle 11g。我也在寻找快速修复,而不是安装log4jdbc或p6sy

3 个答案:

答案 0 :(得分:4)

不同的驱动程序使用不同的名称。在您的情况下,您尝试访问的sql字段不是该驱动程序的可用字段之一。

要获取JDBC驱动程序的所有名称,请使用以下代码:

Class stmt1 = prepStmt.getClass(); 
try {
    java.lang.reflect.Field mem[] = stmt1.getDeclaredFields();  
    for (Field x:mem){
        System.out.println("Field:"+x.getName());
    }    
}  catch (SecurityException ex) {

}

观察字段名称,然后使用上面的代码打印其值。

答案 1 :(得分:2)

答案是,你做不到。至少不适用于Oracle jdbc驱动程序。

答案 2 :(得分:0)

oracle jdbc驱动程序无法实现您的目标。 但一般来说,一些驱动程序(mysql)支持此

prs.toString()