4

我已经尝试了几个示例,但似乎没有一个有效。这是我上次尝试的代码

 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

4

3 回答 3

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) {

}

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

于 2013-09-10T14:27:07.240 回答
2

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

于 2013-11-14T17:03:00.570 回答
0

oraclejdbc 驱动程序无法实现您想要实现的目标。但一般来说,一些驱动程序(mysql)支持这个

prs.toString()

于 2013-09-10T14:24:37.940 回答