我在 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 的处理方式,其他数据库的行为可能有所不同。
默认情况下,ResultSets 被完全检索并存储在内存中。
如果您正在使用具有大量行或
值很大,无法在 JVM 中为内存分配堆空间
需要,您可以告诉驱动程序将结果流回一行
一次。
要启用此功能,请在
以下方式:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
连接器/J 参考实施说明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)