package com.lxf.jdbc;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ScrollTest {
public static void main(String[] args) {
read();
}
// 查询
static void read() {
// limit 0,2表示从第一行开始,显示两行
String sql = "select * from user limit 0, 2";
try (Statement ps = JdbcUtils.getConnection().createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
// 执行语句
ResultSet rs = ps.executeQuery(sql);) {
// 处理结果
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t"
+ rs.getString("name") + "\t" + rs.getDate("birthday")
+ "\t" + rs.getDouble("money"));
}
while (rs.previous()) {
System.out.println(rs.getInt("id") + "\t"
+ rs.getString("name") + "\t" + rs.getDate("birthday")
+ "\t" + rs.getDouble("money"));
}
//指定滚动到哪行
rs.absolute(3);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
方法:crateStatement(int resultSetType,int resultSetConcurrency);
创建一个Statement对象,该对象将生产具有给定类型和并发性的ResultSet对象.
方法:createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability);
创建一个 Statement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象.
结果集类型:
ResultSet.TYPE_FORWARD_ONLY:只能向前
ResultSet.TYPE_SCROLL_INSENSITIVE :可滚动,不感知数据变化。
ResultSet.TYPE_SCROLL_SENSITIVE 可滚动,并感知数据变化。
并发性:
ResultSet.CONCUR_READ_ONLY:只读
ResultSet.CONCUR_UPDATABLE :可更新
可保存性:
ResultSet.HOLD_CURSORS_OVER_COMMIT:在提交时候关闭结果集
这里用的Mysql数据库,有些数据库不支持滚动,可用以下方法但效率极低
static void read() {
// 创建语句
String sql = "select * from user";
try (Statement ps = JdbcUtils.getConnection().createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
// 执行语句
ResultSet rs = ps.executeQuery(sql);) {
int i=0;
// 处理结果
while (rs.next() && i<2) {
i++;
System.out.println(rs.getInt("id") + "\t"
+ rs.getString("name") + "\t" + rs.getDate("birthday")
+ "\t" + rs.getDouble("money"));
}
while (rs.previous()) {
System.out.println(rs.getInt("id") + "\t"
+ rs.getString("name") + "\t" + rs.getDate("birthday")
+ "\t" + rs.getDouble("money"));
}
//指定滚动到哪行
rs.absolute(3);
} catch (SQLException e) {
e.printStackTrace();
}
}