我尝试了几个例子,但似乎都没有。这是我上次尝试的代码
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
答案 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()