小编典典

如何从PreparedStatement获取参数?

sql

我正在为SQLException编写通用记录器,我想获取传递给PreparedStatement的参数,该怎么做?我能够得到他们的数量。

ParameterMetaData metaData = query.getParameterMetaData();
parameterCount = metaData.getParameterCount();

阅读 252

收藏
2021-03-23

共1个答案

小编典典

简短的回答:不能。

长答案:所有JDBC驱动程序都会将参数值保留在某个地方,但是没有标准的方法来获取它们。

如果要出于调试或类似目的而打印它们,则有几种选择:

  1. 创建一个传递JDBC驱动程序(使用p6spy或log4jdbc作为基础),该驱动程序保留参数的副本并提供公共API来读取它们。

  2. 使用Java Reflection API(Field.setAccessible(true)是您的朋友)来读取JDBC驱动程序的私有数据结构。那是我的首选方法。我有一个工厂委托给特定于DB的实现,该实现可以解码参数,并允许我通过读取参数getObject(int column)

  3. 提交错误报告,并要求对异常进行改进。尤其是在告诉您出了什么问题时,Oracle真的很st。

2021-03-23