java.sql.ResultSet.getXXX为什么同一行记录只能执行一次

BestTim 2012-08-08 10:00:35
同一行记录第二次调用就出错。例如

while(rs.Next())
{
a = rs.getInt(0);
b = rs.getInt(0); 这里就出错了
}
...全文
423 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
BestTim 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
LZ的分给错人咯
[/Quote]
没有给错,我问的就是为什么两次取同一列会有问题。他也回答了。至于getInt(0)只是笔误。
GeekQing 2012-08-13
  • 打赏
  • 举报
回复
LZ的分给错人咯
GeekQing 2012-08-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
引用 6 楼 的回复:
好吧各位,应该写getInt(1)
但是我要问的是为什么第二次用会出错


啊,好古老的一个问题。。。

第二次出错的原因,是因为你创建Statement的时候,没有指定结果集(游标)模式!

createStatement(int resultSetType, int resultSetConcurrency)

resultSetType 就是……
[/Quote]

首先,我想说的是,这里不是get的一条记录,而是一条记录的一列,OK?
您这是跑题了,然后对于列是从1开始计数,你get两次1绝对没有任何问题。但是不能get(0)
licip 2012-08-09
  • 打赏
  • 举报
回复
+1[Quote=引用 3 楼 的回复:]
javadoc文档里有说明,列是从1开始的

getInt
int getInt(int columnIndex)
throws SQLException以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。

参数:
columnIndex - 第一个列是 1,第二个列是 2,……
返回:
列值;如果值为 SQL NULL,则返回……
[/Quote]
huimiezu 2012-08-09
  • 打赏
  • 举报
回复
while(rs.Next())
{
a = rs.getInt(1);
//b = rs.getInt(1); 这里就出错了
b=a;//为什么非要第二次那样取呢,这样就行了
}
BestTim 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
javadoc文档里有说明,列是从1开始的

getInt
int getInt(int columnIndex)
throws SQLException以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。

参数:
columnIndex - 第一个列是 1,第二个列是 2,……
返回:
列值;如果值为 SQL NULL,则返回……
[/Quote]
好吧,应该写getInt(1)
但是我要问的是为什么第二次用会出错
BestTim 2012-08-09
  • 打赏
  • 举报
回复
好吧各位,应该写getInt(1)
但是我要问的是为什么第二次用会出错
BestTim 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
对了,楼主可以做个实验,老版的JDBC,下面这么执行也会报错:
a = rs.getInt(2); // 先大下标
b = rs.getInt(1); // 再小下标

顺序正确则不会报错。
[/Quote]
这个用的是Java se 1.6 通过jdbc:odbc方式访问access
BestTim 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
引用 6 楼 的回复:
好吧各位,应该写getInt(1)
但是我要问的是为什么第二次用会出错


啊,好古老的一个问题。。。

第二次出错的原因,是因为你创建Statement的时候,没有指定结果集(游标)模式!

createStatement(int resultSetType, int resultSetConcurrency)

resultSetType 就是结……
[/Quote]
谢谢,这才是我想知道的东西。原来FORWARD_ONLY对字段也有效,学习了。其他没仔细看问题的,抱歉了,虽然我例子中确实马虎了。
MiceRice 2012-08-09
  • 打赏
  • 举报
回复
对了,楼主可以做个实验,老版的JDBC,下面这么执行也会报错:
a = rs.getInt(2); // 先大下标
b = rs.getInt(1); // 再小下标

顺序正确则不会报错。
MiceRice 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
好吧各位,应该写getInt(1)
但是我要问的是为什么第二次用会出错
[/Quote]

啊,好古老的一个问题。。。

第二次出错的原因,是因为你创建Statement的时候,没有指定结果集(游标)模式!

createStatement(int resultSetType, int resultSetConcurrency)

resultSetType 就是结果集模式,取值范围是:
ResultSet.TYPE_FORWARD_ONLY: cursor may move only forward.
ResultSet.TYPE_SCROLL_INSENSITIVE: scrollable but generally not sensitive to changes to the data that underlies the ResultSet.
ResultSet.TYPE_SCROLL_SENSITIVE: scrollable and generally sensitive to changes to the data that underlies the ResultSet.

从性能考虑,缺省情况下,结果集模式为 TYPE_FORWARD_ONLY,这种情况下,只能向前读取;字段和行集都是如此。


不过这个也是老JDBC的问题了,话说楼主还在用JDBC2.0 ?
brightyq 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
好吧各位,应该写getInt(1)
但是我要问的是为什么第二次用会出错
[/Quote]

出什么错了?错误日志粘下。
GeekQing 2012-08-09
  • 打赏
  • 举报
回复
不能getInt(0),因为结果集的索引从1开始,所以你前面报错不是因为get了两次而报错,而是获取索引0报错,你可以试试getInt(1)两次是完全没问题的。
zhangyong369 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
javadoc文档里有说明,列是从1开始的

getInt
int getInt(int columnIndex)
throws SQLException以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。

参数:
columnIndex - 第一个列是 1,第二个列是 2,……
返回:
列值;如果值为 SQL NULL,则返回……
[/Quote]
OK
接分
qybao 2012-08-08
  • 打赏
  • 举报
回复
javadoc文档里有说明,列是从1开始的

getInt
int getInt(int columnIndex)
throws SQLException以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。

参数:
columnIndex - 第一个列是 1,第二个列是 2,……
返回:
列值;如果值为 SQL NULL,则返回值为 0
抛出:
SQLException - 如果 columnIndex 无效;如果发生数据库访问错误或在已关闭的结果集上调用此方法
brightyq 2012-08-08
  • 打赏
  • 举报
回复
rs.getInt(0) ?

貌似索引是从1开始的

re.getInt(1)
yjbukn0108 2012-08-08
  • 打赏
  • 举报
回复
有没有实例化

62,617

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧