如果查询有子查询,则prepare语句不成功

时间:2013-09-20 07:12:21

标签: java jdbc

我使用下面的简单查询来获取测试结果。

    qName = "select total_requests from (select 10000 as total_requests from dual)"; //this can be dynamic query
    preStatement = connection.prepareStatement(qName);
    ParameterMetaData pmd = preStatement.getParameterMetaData();

    int stmtCount = pmd.getParameterCount();
    int paramsCount = params == null ? 0 : params.length;

    for (int i = 0; i < params.length; i++) {
        if (params[i] != null) {
            preStatement.setObject(i + 1, params[i]);
        } else {
            int sqlType = Types.VARCHAR;
            if (!paramValid) {
                try {
                    sqlType = pmd.getParameterType(i + 1);
                } catch (SQLException e) {
                    paramValid = true;
                }
            }
            preStatement.setNull(i + 1, sqlType);
        }
    }

 ResultSet   rs = preStatement.executeQuery();

一旦我执行第3行,应用程序

会抛出以下错误
Caused by: java.lang.AbstractMethodError: com.inet.pool.b.getParameterMetaData()Ljava/sql/ParameterMetaData;
        at com.core.admin.util.AnalyzeHelper.fillQuery(AnalyzeHelper.java:61)

这是由于子查询问题吗? 如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

用它来执行查询

preStatement.executeQuery();

您需要有一个结果集供查看

ResultSet rs=preStatement.executeQuery();
while(rs.next())
{
rs.getString(1);// I assume that first column is a String.If it is an INT then use rs.getInt(1);

//similarly for other columns
}

答案 1 :(得分:0)

它可能对你有帮助。

qName = "select total_requests from (select 10000 as total_requests from dual)";
preStatement = connection.prepareStatement(qName);
ResultSet rs= preStatement.executeQuery();