mysql同时查出符合条件数据与总数

本文介绍了MySQL中的SQL_CALC_FOUND_ROWS和FOUND_ROWS()函数的使用,这两个特性允许在分页查询时获取满足条件的所有数据量。在Java中,通过建立数据库连接,执行SQL查询,可以分别获取查询结果和总记录数。需要注意的是,使用此方法可能会影响查询缓存,导致性能下降。
摘要由CSDN通过智能技术生成

SQL_CALC_FOUND_ROWS是mysql特有的保留字,与此对应使用的 函数是 FOUND_ROWS(),可以在查出数据的同时查出所有满足条件的数据量。例如:

SELECT SQL_CALC_FOUND_ROWS * FROM url WHERE id > 7 LIMIT 2;
SELECT FOUND_ROWS();

java代码实现:

Class.forName("com.mysql.cj.jdbc.Driver");
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/kjj_test?characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true",
        "root", "pwd")){
    Statement statement = connection.createStatement();
    //found data list
    ResultSet resultSet = statement.executeQuery("SELECT SQL_CALC_FOUND_ROWS * FROM url WHERE id > 7 LIMIT 2;");
    while (resultSet.next()){
        System.out.println( resultSet.getObject(1) );
    }
    resultSet.close();
    statement.close();
    //found rows
    statement = connection.createStatement();
    resultSet = statement.executeQuery("SELECT FOUND_ROWS();");
    while (resultSet.next()){
        System.out.println(String.format("rows is %d", resultSet.getObject(1)) );
    }
    resultSet.close();
    statement.close();
}

需要注意的是:这个方法有一个副作用,当使用了SQL_CALC_FOUND_ROWS以后,将不能使用查询缓存、在特殊情况下反而或损失一些性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值