微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

 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

解决方法:

不同的驱动使用不同的名称在您的情况下,您尝试访问的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) {

}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐