MySql——得到ResultSet的记录个数的正确方法
2016-07-26 17:17
1236 查看
场景:
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","haha","haha");
String sql = "select * from gonglue";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
count = rs.getFetchSize()结果count值是0,gonglue表有数据的
原因分析:
getFetchSize()方法不是获得记录数,而是获得每次抓取的记录数,默认是0,也就是说不限制。可以用setFetchSize()来设置,而getFetchSize()是用来读出那个设置值。设置为正整数之后,ResultSet每次抓取的最多纪录数就有了上限,而不是所有符合条件的记录。
如果你是想获得符合条件的记录数目,最少有3种方法
方法一:
count=0;
while(resultSet.next()){
count++;
}
方法二:
resultSet.last();
count=resultSet.getRow();
方法三:
String sql = "select count(*) totalCount from gonglue";
count=rs.getInt("totalCount");
获得ResultSet的记录个数
因为ResultSet没有方法可直接得到记录数,只有另想方法,可采用如下方法:
Statement stmt = db.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql);
rs.last();//移到最后一行
int count = rs.getRow();
rs.beforeFirst();//移到初始位置
注意:
因为默认的 ResultSet 对象仅有一个向前移动的光标,必须将ResultSet指定为可滚动的。所以第一行代码是必须的,否则会报如下错误:
ResultSet may only be accessed in a forward direction
ResultSet类的createStatement(int resultSetType, int resultSetConcurrency);方法中,参数一为结果集类型,可取值为
1)ResultSet.TYPE_FORWORD_ONLY,结果集只可向前滚动;
2)ResultSet.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
3)ResultSet.TYPE_SCROLL_SENSITIVE,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。
参数二为结果集可进行的操作,可取值为:
1)ResultSet.CONCUR_READ_ONLY 只读
2)ResultSet.CONCUR_UPDATABLE 可修改
知识扩充:获得ResultSet的字段个数
使用rs.getMetaData()方法,该方法的返回类型是ResultSetMetaData,在这个类中调用getColumnCount()方法,即可得到字段个数。
代码如下:
ResultSetMetaData rsmd1 = rs.getMetaData();
int count = rsmd1.getColumnCount();
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","haha","haha");
String sql = "select * from gonglue";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
count = rs.getFetchSize()结果count值是0,gonglue表有数据的
原因分析:
getFetchSize()方法不是获得记录数,而是获得每次抓取的记录数,默认是0,也就是说不限制。可以用setFetchSize()来设置,而getFetchSize()是用来读出那个设置值。设置为正整数之后,ResultSet每次抓取的最多纪录数就有了上限,而不是所有符合条件的记录。
如果你是想获得符合条件的记录数目,最少有3种方法
方法一:
count=0;
while(resultSet.next()){
count++;
}
方法二:
resultSet.last();
count=resultSet.getRow();
方法三:
String sql = "select count(*) totalCount from gonglue";
count=rs.getInt("totalCount");
获得ResultSet的记录个数
因为ResultSet没有方法可直接得到记录数,只有另想方法,可采用如下方法:
Statement stmt = db.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql);
rs.last();//移到最后一行
int count = rs.getRow();
rs.beforeFirst();//移到初始位置
注意:
因为默认的 ResultSet 对象仅有一个向前移动的光标,必须将ResultSet指定为可滚动的。所以第一行代码是必须的,否则会报如下错误:
ResultSet may only be accessed in a forward direction
ResultSet类的createStatement(int resultSetType, int resultSetConcurrency);方法中,参数一为结果集类型,可取值为
1)ResultSet.TYPE_FORWORD_ONLY,结果集只可向前滚动;
2)ResultSet.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
3)ResultSet.TYPE_SCROLL_SENSITIVE,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。
参数二为结果集可进行的操作,可取值为:
1)ResultSet.CONCUR_READ_ONLY 只读
2)ResultSet.CONCUR_UPDATABLE 可修改
知识扩充:获得ResultSet的字段个数
使用rs.getMetaData()方法,该方法的返回类型是ResultSetMetaData,在这个类中调用getColumnCount()方法,即可得到字段个数。
代码如下:
ResultSetMetaData rsmd1 = rs.getMetaData();
int count = rsmd1.getColumnCount();
相关文章推荐
- MySQL中的integer 数据类型
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- MySQL存储过程
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件