了解Forward Forward ResultSet

时间:2015-05-11 07:36:13

标签: java jdbc

我在mysql数据库中有一个表,其中有一些行可用。我想从我的jdbc程序中的表中检索数据,其中ResultSet仅向前。我的代码是:

import java.sql.*;

public class Test1 {
    static{
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        Connection con=null;
        Statement st=null;
        ResultSet rs=null;
        int id=0;
        String name=null;
        try {
            con=DriverManager.getConnection("jdbc:mysql://localhost:3306/hiitstudents","root", "rustyiron");
            st=con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.TYPE_SCROLL_INSENSITIVE);
            String query="select * from students";
            rs=st.executeQuery(query);
            while(rs.next()){
                id=rs.getInt(1);
                name=rs.getString(2);
                System.out.println(id+"\t"+name);
            }               ;
            while(rs.previous()){
                id=rs.getInt(1);
                name=rs.getString(2);
                System.out.println(id+"\t"+name);
            }
            } catch (SQLException e) {
                e.printStackTrace();
        }finally{
            try{
                if(rs!=null)
                    rs.close();

                if(st!=null)
                    st.close();

                if(con!=null)
                    con.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
    }
}

但由于默认结果集只是转发,我们不能在其中调用previous()或它不应该工作,但在我的程序中这样做也会以相反的顺序检索数据。我的代码有什么问题?

1 个答案:

答案 0 :(得分:1)

这是MySQL处理它的方式,其他数据库可能表现不同。

  

默认情况下,ResultSet完全检索并存储在内存中。

     

如果您正在使用具有大量行数的ResultSet   大值并且无法在JVM中为内存分配堆空间   必需的,您可以告诉驱动程序将结果流回一行   一次。

     

要启用此功能,请在中创建一个Statement实例   以下方式:

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
              java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

Connector/J Reference Implementation Notes