通常,a
preparedStatement.toString()将为您提供查询(包括绑定参数)。但这取决于的实际实现
PreparedStatement(例如,使用PostgreSQL隐式实现)。
您提到为您带来
preparedStatement.toString()回报
net.sf.log4jdbc.PreparedStatementSpy@7d70d1b1。我对
log4jdbc
并不熟悉,但是我似乎
PreparedStatementSpy正在包装您的实际代码
PreparedStatement。要从您的
preparedStatement尝试中获取它,例如
if(preparedStatement instanceof PreparedStatementSpy) usedSql = ((PreparedStatementSpy) preparedStatement).getRealStatement().toString();
编辑 :因为您使用的是 Derby, 所以简单
toString()不会做。一种解决方法是使用use
PreparedStatementSpy.dumpedSql(),它将返回 log4jdbc 用于记录的相同字符串。不幸的是,它是一种 受保护的
方法,您必须使用反射:
if (preparedStatement instanceof PreparedStatementSpy) { Method m = PreparedStatementSpy.class.getDeclaredMethod("dumpedSql"); m.setAccessible(true); usedSql = (String) m.invoke(preparedStatement);}// omitted exception handling


