java - 从 ResultSet 读取 Sybase 列时,我得到“JZ006:Caught IOException:java.io.IOException:JZ0R3:Column is DEAD”。
问题描述
我有一个 Java 项目和一个 Sybase 数据库。我正在使用 JDBC 来查询存储过程。
但是,当我调用读取结果集的某个列值时,出现以下错误:
Caused by: java.sql.SQLException: JZ006: Caught IOException: java.io.IOException: JZ0R3: Column is DEAD. This is an internal error; please report it to Sybase technical support.
at com.sybase.jdbc4.jdbc.ErrorMessage.raiseError(ErrorMessage.java:753)
at com.sybase.jdbc4.jdbc.ErrorMessage.raiseErrorCheckDead(ErrorMessage.java:1166)
at com.sybase.jdbc4.tds.TdsJdbcInputStream.getString(TdsJdbcInputStream.java:2371)
at com.sybase.jdbc4.jdbc.SybResultSet.getString(SybResultSet.java:320)
其他列工作正常。
这是一个例子:
var id = rs.getLong("id"); // works fine
var created = rs.getObject("created"); // throws an error
我可能做错了什么?
解决方案
问题是我没有按正确的顺序阅读这些列。
必须按照存储过程中指定的顺序读取列。
例如,当存储过程是:
create or replace procedure my_procedure()
as
begin
select
o.id, o.name, o.created
from order o
end
go
然后必须按以下顺序读取列:
var id = rs.getLong("id"); // works fine
var name = rs.getString("name"); // !!! was missing in the question's example above
var created = rs.getObject("created"); // works fine now
推荐阅读
- python - 带有 Manim 的长文本
- javascript - 如何在单击下拉 btn 链接下一页时保持显示下拉容器(列出项目)
- angular - Twitch OAuth 与 Nebular (Angular)
- sql - 关于SQL查询和变换row和col的问题
- r - R将值映射到新列
- aws-sdk-js - 将 aws-sdk-js v2 迁移到 v3。错误尖锐:输入文件丢失
- vue.js - Luxon to.ISO() 不是函数
- python - 我正在尝试对包含多个值的特定列中的值进行分组?
- python - LSTM:ValueError:层顺序的输入0与层不兼容:预期ndim = 3,发现ndim = 2。收到的完整形状:(无,1)
- php - 如何将 Woocommerce 的订单状态添加到时间表视图中的 Woocommerce Bookings wc-bookings-schedule-booking-info?