JDBC提供了可滚动结果集,可以向前滚,也可以向后滚。下面是几个API
Statement st =
connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//可回滚参数
ResultSet rs = st.executeQuery(sql);
rs.beforeFirst();//移到ResultSet最前面
rs.afterLast();//移到ResultSet最后面
rs.first();//获取第一跳记录
rs.isFirst();//是否是第一跳记录
rs.last();//获取最后一条记录
rs.isLast();
rs.absolute(9);//跳到第9条记录
rs.moveToInsertRow();
rs.next();//移到下一行
rs.previous();//移到上一行
可更新结果集
conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs.updateString("col name", "new value");
rs.updateRow();
可回滚结果集,可以用来分页,但是这种方法有个很大的缺点,必须将这些记录都读到内存中。对于有些数据库不支持分页的,可以使用此方法来进行分页。
//demo
package cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ScrollTest {
/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
scroll();
}
static void scroll() throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
// 2.建立连接
conn = JdbcUtils.getConnection();
st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = st
.executeQuery("select id, name, money, birthday from user limit 150, 10");
while (rs.next()) {
System.out.println(rs.getObject("id") + "\t"
+ rs.getObject("name") + "\t"
+ rs.getObject("birthday") + "\t"
+ rs.getObject("money"));
}
System.out.println("------------");
rs.absolute(150); //跳到第150条记录,并取出连续10条
int i = 0;
while (rs.next() && i < 10) {
i++;
System.out.println(rs.getObject("id") + "\t"
+ rs.getObject("name") + "\t"
+ rs.getObject("birthday") + "\t"
+ rs.getObject("money"));
}
// if (rs.previous())
// System.out.println(rs.getObject("id") + "\t"
// + rs.getObject("name") + "\t"
// + rs.getObject("birthday") + "\t"
// + rs.getObject("money"));
} finally {
JdbcUtils.free(rs, st, conn);
}
}
}