JDBC操作mysql。得到一个结果集,如何定位到这个结果集的某一行?

小小刚 2011-08-30 09:24:54
我通过执行sql语句得到一个结果集 ResultSet rs;
如何定位到这个rs的某一具体行呢?

不要使用rs.next()逐行判断,而是直接定位到比如第三行,而不是第一行、第二行、第三行这样子顺序执行

需要一个高手为我解答呀~~~
...全文
754 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
风尘中国 2011-08-31
  • 打赏
  • 举报
回复
首先要看数据库产品是否是支持可滚动的结果集,如果不支持则无法做到,MySQL是支持的,下面程序也进行了判断是否支持,然后具体到某一行用的API你可以到ResultSet的API上找,这里给出一个实例,直接跳转找到第五行,然后进行获取数据
运行程序需要test数据库下面有customer数据表,创建语句也贴出来
CREATE TABLE `customer` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(80) DEFAULT NULL,
`age` smallint(6) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
)

 public static void main(String[] args)throws Exception{
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/TEST?useUnicode=true&characterEncoding=UTF-8";
String user="root";
String password="root";

Class.forName(driver);
Connection conn= DriverManager.getConnection(url,user,password);

DatabaseMetaData dbmd=conn.getMetaData();
//下面判断是否支持可滚动结果集
if(dbmd.supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE)){
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs=stmt.executeQuery("select * from customer");
//一下是传统的遍历方法
while(rs.next()){
int id=rs.getInt("id");
int age=rs.getInt("age");
String name=rs.getString("name");
System.out.println("id="+id+",age="+age+",name="+name);
}
//传统遍历方法结束
// rs.first();
rs.absolute(5); //直接跳转到第五行

//以下取出第五行的数据,只有三列分别取数据
int id=rs.getInt("id");
int age=rs.getInt("age");
String name=rs.getString("name");
System.out.println("第五行输出:id="+id+",age="+age+",name="+name);

//关闭数据库连接,释放资源
rs.close();
stmt.close();
conn.close();
}else{
System.out.println("数据库不支持可滚动结果集");
}



}
阳明 to life 2011-08-30
  • 打赏
  • 举报
回复
boolean absolute(int row)
将指针移动到此 ResultSet 对象的给定行编号。
看API的说明,已经定位在该行了,要读哪一列调用相应的get就行了
小小刚 2011-08-30
  • 打赏
  • 举报
回复
自己顶顶,不要沉了、
小小刚 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gl74gs48 的回复:]

stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs.absolute(5) //绝对定位

boolean absolute(int row)
[/Quote]

绝对定位返回的是一个布尔值。我想要得到这一行后仍然可以根据这一行的列去获得值。
阿甘1976 2011-08-30
  • 打赏
  • 举报
回复
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs.absolute(5) //绝对定位

boolean absolute(int row)

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧