了解仅前向结果集

问题描述 投票:0回答:1

我在 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()
否则它不应该工作,但在我的程序中这样做也会以相反的顺序检索数据。我的代码有什么问题?

java jdbc
1个回答
3
投票

这是 MySQL 的处理方式,其他数据库的行为可能有所不同。

默认情况下,结果集被完全检索并存储在内存中。

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

要启用此功能,请在 以下方式:

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

连接器/J 参考实施说明

© www.soinside.com 2019 - 2024. All rights reserved.