问个初级问题啊,在用jdbc时,就是那个resultSet结果集得到某个字段值只能得到一次吗。
比如    .........
          .
          .
      resutSet rs=stm.excuteQuery(sql);
     while(rs.next)
     {
        System.out.print(rs.getString(0));  //第一次取值可以,正常
         System.out.print(rs.getString(0));  //这里出现异常,提示no data found
     }   请问大侠们,为什么,小弟研究的不深,请指教,祝大家周末愉快。。

解决方案 »

  1.   

    微软的jdbc驱动默认的是仅有一个向前移动的指针,不可重复读取
    楼主可以更换为jtds的驱动
      

  2.   

    应该从 1 开始,而不是从 0 开始。虽然在 ResultSet 的 API DOC 上面说明了 ResultSet 对于每个列只能读取一次,但是 JDBC 厂商的实现,
    如 MySQL、Oracle 驱动并没有这个限制,可以反复地读。我记得 SQL Server 2000 好像就不行,原来试过
    现在也没 SQL Server 了,没办法测试。import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;public class Replacement {
        
        static {
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        
        public static void main(String[] args) {        
            
            try {
                Connection con = null;
                PreparedStatement ps = null;
                ResultSet rs = null;            try {
                    con = getConnection();
                    String sql = "SELECT * FROM emp";
                    ps = con.prepareStatement(sql);
                    rs = ps.executeQuery();
                    while(rs.next()) {
                        System.out.println(rs.getString(3));
                        System.out.println(rs.getString(2));
                        System.out.println(rs.getString(1));
                        System.out.println(rs.getString(2));
                    }
                } finally {
                    rs.close();
                    ps.close();
                    con.close();
                }
            } catch(SQLException e) {
                e.printStackTrace();
            }        
        }

        private static Connection getConnection() throws SQLException {
            String url = "jdbc:oracle:thin:@localhost:1521:orcl";
            String user = "scott";
            String password = "110908";
            return DriverManager.getConnection(url, user, password);
        }
    }
      

  3.   

    可以不规则读取,比如
    rs.getString(3)
    rs.getString(2)
    rs.getString(1)
      

  4.   

    对不起上面说的不准确,Statement stm = con.createStatement(int type,int concurrency);ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");第一个是回滚数据集类型,表示ResultSet的游标可以上下移动,第二个是表示可以用结果集更新数据库内容 
    其中type有如下几个值:
    ResultSet.TYPE_FORWORD_ONLY:rs的游标只能向下移动。
    ResultSet.TYPE_SCROLL_INSENSITIVE:rs的游标可以上下移动,当数据库变化时,结果集不变
    ResultSet.TYPE_SCROLL_SENSITIVE:rs的游标可以上下移动,当数据库变化时,结果集同步改变
      

  5.   

    你那里已经有While循环了,干吗还要取一次?
      

  6.   

    楼主可以用 ResultSetMetaData 的。。
      

  7.   

    楼主可以用 ResultSetMetaData 的。。
      

  8.   

    晕,
    1 0没有数据,从1开始
    2 如果不允许读第二次,请更新jdbc驱动
      

  9.   

    Statement stm = con.createStatement(int type,int concurrency); 
    Type 的类型 :
    ResultSet.TYPE_FORWORD_ONLY:rs的游标只能向下移动。 
    ResultSet.TYPE_SCROLL_INSENSITIVE:rs的游标可以上下移动
    默认是第一种的。
      

  10.   

    SQL Server 2000 是不允许反复读...不过你可以用字符串把读取的结果记录下来嘛.
      

  11.   

    如果需要多次用到相同Column的数据可以先
    String a=rs.getString(0);
    int b=rs.getInt(1);
    System.out.println(a);System.out.println(a);System.out.println(a);System.out.println(a);System.out.println(a);System.out.println(a);System.out.println(a);System.out.println(a);System.out.println(a);
      

  12.   

    没有注意过这个问题,不知道CatchRowSet是不是可以反复读,它比ResultSet的功能多.
      

  13.   

    请问你们是不是专业的java人员啊,好恐怖啊,我怎么不明白你们的语言啊