java.sql.SQLException:解析可调用语句元数据时的内部错误(缺少参数类型)

时间:2016-06-17 12:55:49

标签: java mysql sql-server

近2个小时,我现在正在寻找解决方案,但找不到解决方案......

我收到了这个错误,我无法找到它的来源,它让我发疯。你能帮助我吗?

错误:

  

java.sql.SQLException:解析可调用语句时出现内部错误   元数据(缺少参数类型)

代码的一部分来自:

public char checkMap(int x, int y) {
        char c = ' ';

        try {
            DAOConnection co = new DAOConnection(DBConnection.getInstance().getConnection());

            final String sql = "{call Selectlvl1(?,?)}";
            final CallableStatement call = co.getConnection().prepareCall("{call Selectlvl1(?,?)}"); 
            call.setInt(x, x);
            call.setInt(y, y);
            call.execute();
            final ResultSet resultSet = call.getResultSet();
            c = resultSet.getString("symbol").charAt(0);

        } catch (SQLException se) {
            // Handle errors for JDBC
            se.printStackTrace();
        } catch (Exception e) {
            // Handle errors for Class.forName
            e.printStackTrace();

        }
        return c;

    }

编辑:就是这样,你知道,我一直在驾驶一些测试,而错误就是这样 我正在使用" CallableStatement"之一。

编辑2:SQL过程:

  

创建DEFINER = root @ localhost程序Selectlvl1(在p_x   INT(3),IN p_y INT(3))SELECT符号FROM LorannProject.level1   其中x = p_x&& y = p_y;

Stack Trace(部分内容):

  

java.sql.SQLException:对空结果集的非法操作。在   com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)at at   com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)at at   com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)at at   com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)at at   com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:790)at at   com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5240)     在com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5163)     在com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5202)     在model.DAOConnection.checkMap(DAOConnection.java:24)at   model.Model.getMap1(Model.java:41)

注意,现在,在更改call.setInt()之后,错误现在是#34;空结果集上的非法操作。"。

编辑3:只是添加一些新闻,我现在又出现了一个错误:

java.sql.SQLException:对空结果集的非法操作。

我认为(非常肯定)它来自这一行:

    c = resultSet.getString("symbol").charAt(0);

我正在尝试从名为" symbol"的唯一列中获取第一个字符,我不知道这行是否正确。

1 个答案:

答案 0 :(得分:0)

也许你可以试试:

if (resultSet.next()) {
    c = resultSet.getString("symbol").charAt(0);
}