MySQL的JDBC判断查询结果是否为空以及获取查询结果行数的方法

判断查询结果是否为空

在JDBC中没有方法hasNext去判断是否有下一条数据,但是我们可以使用next方法来代替。

看next方法的官方解释:

  • boolean next()
          throws 

    Moves the cursor forward one row from its current position. A ResultSet cursor is initially positioned before
    the first row; the first call to the method next makes the first row the current row; the second call makes the second row the current row, and so
    on.

    When a call to the next method returns false,
    the cursor is positioned after the last row. Any invocation of a ResultSet method which requires a current row will result in a SQLException being
    thrown. If the result set type is TYPE_FORWARD_ONLY, it is vendor specified whether their JDBC driver implementation will return false or
    throw an SQLException on a subsequent call to next.

    If an input stream is open for the current row, a call to the method next will
    implicitly close it. A ResultSet object‘s warning chain is cleared when a new row is read.

    Returns:
    true if the new current row is valid; false if
    there are no more rows
    Throws:
    SQLException -
    if a database access error occurs or this method is called on a closed result set

翻译如下:

boolean next() throws SQLException

将当前行从上一行移到下一行。一个 ResultSet的当前行最初指向第一行查询结果前。当第一次调用next的时候,当前行将会指向第一行查询结果。第二次调用就会指向第二行查询结果,等等。

当调用next方法返回false的时候,当前行当前行指向最后一行查询结果之后。这时候,任何ResultSet 的请求当前行的方法调用都会导致SQLException 被抛出。但如果查询的结果设置为TYPE_FORWARD_ONLY,next方法在这时候根据实现厂商的不同,可能会返回false也坑能会抛出SQLException 异常

的警告将会被清楚。

关于的next的开始和结束,可以用下面的图来解释:

0->1->2->3->4->0                中间的1, 2, 3, 4是查询结果

^                           ^

开始                          结束

判断JDBC查询结果是否为空的正确姿势:

Statement statement = conn.createStatement();
ResultSet res = statement.executeQuery(selectSql);
if (!res.next()) {
    //res is null
} else {
    // res is not null
}

获取查询结果的行数

JDBC并没有直接提供获取查询结果总行数的方法给我们调用,为此我们需要使用间接的手段来执行:

第一种方法:

ResultSet res = ...使用某种方法获取查询结果
int nRow = 0;
while(res.next()) {
    ++nRow;
}
res.beforeFirst();
// 其他代码不变

第二种方法:

ResultSet res = ...使用某种方法获取查询结果
res.last();
final int nRow = res.getRow();
res.beforeFirst();
// 其他代码不变
时间: 2024-10-11 19:26:34

MySQL的JDBC判断查询结果是否为空以及获取查询结果行数的方法的相关文章

SqlSever基础 count 查询某一列中不为NULL的行数

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 table 2 code 1 --创建一个数据库 2 create database helloworld1 3 4 use master 5 drop database helloworld1 6 7 --用helloworld1这个数据库 8 use helloworld1 9 10 --

使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询

转载请注明:http://blog.csdn.net/uniquewonderq 问题: 使用JDBC连接Mysql数据库,实现对Emp表数据的分页查询功能. 方案: 对于较大的数据量,通常采用分页查询的方式.不同的数据库产品有不同的数据库级的分页查询策略.例如:Oracle通常使用rownum的方式:而Mysql使用limit的方式. Oracle采用rownum和子查询实现分页查询,SQL语句如下, select * from (select rownum rn,empno,ename,jo

mysql sql获取上条插入id,update影响行数

1.获取上条插入数据 LAST_INSERT_ID(); 2.获取update影响行数. ROW_COUNT(); mysql> UPDATE t -> SET address = 'beijing111' -> WHERE id = 1 -> AND NAME = 'yubowei'; Query OK, 1 row affected (0.30 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> mysql> SEL

mysql原始jdbc查询例子,返回数据列表

//根据查询条件查询消息列表 public List<Message> queryMessageList(String command,String description){ List<Message> messageList = new ArrayList<Message>(); try { Class.forName("com.mysql.jdbc.Driver");//1.加载数据库驱动 Connection conn = DriverMan

JAVAWEB开发之事务详解(mysql与JDBC下使用方法、事务的特性、锁机制)和连接池的详细使用(dbcp以d3p0)

事务简介 事务的概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功 在开发中,有事务的存在,可以保证数据的完整性. 注意:数据库默认事务是自动提交的,也就是发一条SQL 就执行一条.如果想多条SQL语句放在一个事务中执行,需要添加事务有关的语句. 如何开启事务? 事务的操作方式: 创建表: create table account( id int primary key auto_increment, name varchar(20), money double

Java解惑 之 MySQL与JDBC编程

一.JDBC的常用接口和类: 1.DriverManager:主要用于管理JDBC驱动的服务类.在程序中使用该类的主要功能是获取Connection对象,该类包含如下方法: public static synchronized Connection getConnection(String url, String user, String password)  throws  SQLException:该方法获取数据库的连接. 2.Connection:代表数据库连接对象,而每一个Connect

MySql学习(二) —— where / having / group by / order by / limit 简单查询

这篇博客主要记录sql的五种子句查询语法! 一个重要的概念:将字段当做变量看,无论是条件,还是函数,或者查出来的字段. select五种子句 where 条件查询 group by 分组 having 筛选 order by 排序 limit 限制结果条数 为了练习上面5种子句,先建立一张goods表,主要用于查询操作,表结构如下: 1.基础查询 —— where where常用运算符: 1.1 查出主键为20的商品 :mysql> SELECT goods_id,cat_id,goods_sn

Apache Tomcat/6.0.39如何配置连接mysql,JDBC:mysql-connector-java-5.1.30-bin.jar-成功连接心得

http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html 前提:开启TOMCAT,MYsql MySQL DBCP Example0. Introduction Versions of MySQL and JDBC drivers that have been reported to work: MySQL 3.23.47, MySQL 3.23.47 using InnoDB,, MySQL 3.23

mysql的驱动类com.mysql.jdbc.Driver过时了,需要用com.mysql.cj.jdbc.Driver代替

springboot项目整合mybatis,配置文件如下: server: port: 8081 mybatis: config-location: classpath:mybatis/mybatis-config.xml #mybatis配置文件所在路径 type-aliases-package: com.yuanqiao.entities #所有entity别名类所在包 mapper-locations: classpath:mybatis/mapper/*.xml spring: appl