Exception:
DbUtils使用oracle 查询时
获取stmt.getParameterMetaData()
出现异常AbstractMethodError
解决:
创建QueryRunner时,pmdKnownBroken设置为true,错误解决。
分析原因:
Oracle drivers don't support {@link ParameterMetaData#getParameterType(int) }
通过查看QueryRunner源代码:
设置pmdKnownBroken为true 后,we won't even try it
/**
* Constructor for QueryRunner, allows workaround for Oracle drivers. Methods that do not take a
* <code>Connection</code> parameter will retrieve connections from this
* <code>DataSource</code>.
*
* @param ds The <code>DataSource</code> to retrieve connections from.
* @param pmdKnownBroken Oracle drivers don't support {@link ParameterMetaData#getParameterType(int) };
* if <code>pmdKnownBroken</code> is set to true, we won't even try it; if false, we'll try it,
* and if it breaks, we'll remember not to use it again.
*/
public QueryRunner(DataSource ds, boolean pmdKnownBroken) {
super();
this.pmdKnownBroken = pmdKnownBroken;
this.ds = ds;
}
if (!pmdKnownBroken) {
pmd = stmt.getParameterMetaData();
if (pmd.getParameterCount() < params.length) { throw new SQLException("Too many parameters: expected " + pmd.getParameterCount() + ", was given " + params.length); } }