Qt sql查询

这篇博客探讨了在Qt中使用SQL查询时如何处理结果集、其他语句和查询总条数。重点讨论了分页方法,包括利用qceil进行向上取整以及通过自增长ID或插入时间来解决分页时数据变化导致的问题。同时,文章引用了两篇优快云博客链接,详细说明了在Mysql和Hibernate中如何避免新数据插入引起的数据混乱,提出通过添加时间戳字段并限制查询时间为当前时间之前的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sqlHelper
1.查询放入结果集

QSqlQuery query;
 if (!query.exec(sql)) {
        qCritical("??sql????!");
        return;
    }
    while (query.next()) {
        QMap<QString, QVariant> map;
        for (index = 0; index < columnList.count(); index++) {
            map.insert(columnList[index], query.value(index));
        }
        resVec.push_back(map);
    }

2.针对其他语句

int32_t SqlHelper::ExecuteCommand(const QString& sql, QVariant& lastInsertId) const
{
    if (state == false) {
       return 0;
    }
    QSqlQuery query;
    if (!query.exec(sql)) {
        QSqlError e = query.lastError();
        qCritical("??sql????!");
        return 0;
    }
    lastInsertId = query.lastInsertId();
    return query.numRowsAffected();
}

3.查询总条数

QSqlQuery query;
 if (!query.exec("select count(*) from table")) {
        qCritical("??sql????!");
        return;
    }
    query.next();
    int count = query.value(0).toInt();
    count 即为总条数

4.分页:

return (sumTableNum%5 == 0)?(sumTableNum/5):(sumTableNum/5+1);
或者使用qceil向上取整

5.关于分页时数据库数据发生变化的解决办法:
我这里使用的是自增长ID,因此我通过ID可以实现,也可以设计字段插入时间,通过插入时间排序后,比较时间段来筛选数据也可以
Mysql在分页过程中有新的数据插入造成重复数据:
https://blog.youkuaiyun.com/qq_33517844/article/details/96866301?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-96866301-blog-60583832.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.1&utm_relevant_index=3
数据库分页,翻页时会重新查询数据库,导致新数据参入,排序混乱问题解决方法:
在hibernate中分页查询有固定的方法,传入参数就可直接进行查询.但是如果你的数据库中数据一直在变化,那么当你翻页的时候下一页的内容不是你想象的那样,因为会有新的数据进入到数据库中,旧的数据与新数据综合在一起重新排序的分页.这样的数据就会很乱如何解决这个问题呢?

我们给每一条数据新增一个字段timestemp,记录数据被创建的时间,在经行查询的时候设置数据的创建时间位当前系统时间之前,那么这次查询的语句中就不会再查到数据库中新增的数据,只会在原有的数据上经行分页.这种方式实现最简单对数据库和java代码改动非常小.

https://blog.youkuaiyun.com/mrgaoang/article/details/60583832
2.上层为daomanager,主要设计增删改查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值