同一行记录第二次调用就出错。例如while(rs.Next())
{
      a = rs.getInt(0);
      b = rs.getInt(0);  这里就出错了
}

解决方案 »

  1.   

    rs.getInt(0)  ?貌似索引是从1开始的re.getInt(1)
      

  2.   

    javadoc文档里有说明,列是从1开始的getInt
    int getInt(int columnIndex)
               throws SQLException以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。 参数:
    columnIndex - 第一个列是 1,第二个列是 2,…… 
    返回:
    列值;如果值为 SQL NULL,则返回值为 0 
    抛出: 
    SQLException - 如果 columnIndex 无效;如果发生数据库访问错误或在已关闭的结果集上调用此方法
      

  3.   

    好吧各位,应该写getInt(1)
    但是我要问的是为什么第二次用会出错
      

  4.   

    好吧,应该写getInt(1)
    但是我要问的是为什么第二次用会出错
      

  5.   

    while(rs.Next())
    {
      a = rs.getInt(1);
      //b = rs.getInt(1); 这里就出错了
      b=a;//为什么非要第二次那样取呢,这样就行了
    }
      

  6.   

    不能getInt(0),因为结果集的索引从1开始,所以你前面报错不是因为get了两次而报错,而是获取索引0报错,你可以试试getInt(1)两次是完全没问题的。
      

  7.   


    啊,好古老的一个问题第二次出错的原因,是因为你创建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 ?
      

  8.   

    对了,楼主可以做个实验,老版的JDBC,下面这么执行也会报错:
    a = rs.getInt(2); // 先大下标
    b = rs.getInt(1); // 再小下标顺序正确则不会报错。
      

  9.   

    谢谢,这才是我想知道的东西。原来FORWARD_ONLY对字段也有效,学习了。其他没仔细看问题的,抱歉了,虽然我例子中确实马虎了。
      

  10.   

    这个用的是Java se 1.6 通过jdbc:odbc方式访问access
      

  11.   


    首先,我想说的是,这里不是get的一条记录,而是一条记录的一列,OK?
    您这是跑题了,然后对于列是从1开始计数,你get两次1绝对没有任何问题。但是不能get(0)
      

  12.   

    没有给错,我问的就是为什么两次取同一列会有问题。他也回答了。至于getInt(0)只是笔误。