我在 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()
否则它不应该工作,但在我的程序中这样做也会以相反的顺序检索数据。我的代码有什么问题?
这是 MySQL 的处理方式,其他数据库的行为可能有所不同。
默认情况下,结果集被完全检索并存储在内存中。
如果您正在使用具有大量行或 值很大,无法在 JVM 中为内存分配堆空间 需要,您可以告诉驱动程序将结果流回一行 一次。
要启用此功能,请在 以下方式:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);