当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个 ResultSet的大小,即它的行数和列数。我们知道它的列数可以通过 resultSet.getMetaData().getColumnCount()很容易地得到,然而,java API没有提供直接访问ResultSet行数的接口。
这个时候,有三个办法可以解决:
1.改用select count语句,然后直接从ResultSet里面获取结果:
1 2 3 4 5 6 7 8 9 | try {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select count(*) as rowCount from tableName");
resultSet.next();
int rowCount = resultSet.getInt("rowCount");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} |
2.遍历Resultset,用一个变量记录行数。代码如下:
1 2 3 4 5 6 7 8 9 | int count = 0;
try {
while(resultSet.next()){
count = count + 1;
} } catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} |
3.知道了第二种方法中问题的原因,我们就知道如何更好地解决这个问题了。第二种方法的问题在于返回的结果集中的指针不能自由移动,幸好java为 我们提供了选择,可以让我们创建指针可以自由移动的结果集,所需要做的只有一件事,就是在创建Statement的时候,加上两个参数:
1 2 3 4 5 6 7 8 | try {
//Statement statement = connection.createStatement();
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet resultSet = statement.executeQuery("select * from " + tableName);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} |
1 2 3 4 5 6 7 8 | int rowCount = 0;
try {
resultSet.last();
rowCount = resultSet.getRow();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} |
如果接下来你还要使用结果集,别忘了将指针移到第一行:
1 | resultSet.first();
|
boolean java.sql.ResultSet.absolute(int row) throws SQLException 其中row参数可正可负,具体含义查一下ResultSet的absolute()方法就知道了
推荐阅读
- Integer常量池结合源码解析
- Java基础|Java 打印空心等腰三角形(方法2)
- gradle 每次运行都会下载依赖的解决办法
- 使用vector代替数组
- Java 时间戳格式化
- Java基础|Android开发——JVM、Dalvik以及ART的区别
- XML|XML报文转Map
- Java 8 时间,字符串和Long时间戳互转
- JAVA基础|JAVA基础(TreeMap键是Student值是String案例)