啊,好古老的一个问题第二次出错的原因,是因为你创建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 ?
对了,楼主可以做个实验,老版的JDBC,下面这么执行也会报错: a = rs.getInt(2); // 先大下标 b = rs.getInt(1); // 再小下标顺序正确则不会报错。
int getInt(int columnIndex)
throws SQLException以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。 参数:
columnIndex - 第一个列是 1,第二个列是 2,……
返回:
列值;如果值为 SQL NULL,则返回值为 0
抛出:
SQLException - 如果 columnIndex 无效;如果发生数据库访问错误或在已关闭的结果集上调用此方法
但是我要问的是为什么第二次用会出错
但是我要问的是为什么第二次用会出错
{
a = rs.getInt(1);
//b = rs.getInt(1); 这里就出错了
b=a;//为什么非要第二次那样取呢,这样就行了
}
啊,好古老的一个问题第二次出错的原因,是因为你创建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 ?
a = rs.getInt(2); // 先大下标
b = rs.getInt(1); // 再小下标顺序正确则不会报错。
首先,我想说的是,这里不是get的一条记录,而是一条记录的一列,OK?
您这是跑题了,然后对于列是从1开始计数,你get两次1绝对没有任何问题。但是不能get(0)