近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),INp_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"的唯一列中获取第一个字符,我不知道这行是否正确。
答案 0 :(得分:0)
也许你可以试试:
if (resultSet.next()) {
c = resultSet.getString("symbol").charAt(0);
}