stmt.getParameterMetaData()异常AbstractMethodError

来源:互联网 发布:js 作用域 编辑:程序博客网 时间:2024/05/28 09:34

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);            }        }