QT SQLite3分页删除问题

标签: qt SQlite
25人阅读 评论(0) 收藏 举报
分类:

terminal实验

场景:我打算在QT SQlite3中使用分页删除操作。即delete 搭配limit。

如下的例子使用limit、offet SQL关键字来实现分页查询。
在terminal中实验:

sqlite> select * from test;
1|10
2|20
3|30
sqlite> select * from test order by var2 desc;
3|30
2|20
1|10
sqlite> select * from test order by var2 desc limit 2 offset 2;
1|10
sqlite> select * from test order by var2 desc limit 2 offset 0;
3|30
2|20

删除第一条记录:

sqlite> delete from test limit 1;
sqlite> select * from test;
2|20
3|30

现在,建立数据表test2,使用BIGINT 来存储time(NULL)计算出的从1970年0时0分0秒到现在的秒数。
再使用带order by的条件限制删除操作,

sqlite> select * from test2;
hello|123124
abcse|223124
abc|323124
sqlite> delete from test2 order by num asc limit 1;
sqlite> select * from test2;
abcse|223124
abc|323124

以上均是正常的,没有出现问题。

QT下SQlite分页删除

建立表格:

CREATE TABLE IF NOT EXISTS Vocabulary (myWord text, translation text, secs INTEGER, PRIMARY KEY(myWord, secs))

分页删除:
SQL语句为 DELETE FROM Vocabulary ORDER BY secs ASC LIMIT :limitNumber
然后再使用query bindValue :limitNumber
最后执行,出现信息:query exec failed: Parameter count mismatch
QT将:limitNumber当作数据表的字段了。
然后我修改成:DELETE FROM Vocabulary ORDER BY secs ASC LIMIT 1
却得到:query exec failed: No query Unable to fetch row
一般,这样的信息是在说,我的SQL语句有问题,但我用终端的SQlite3尝试了,SQL查询是没有语法错误的,神马情况?
接着,我在SQlite官网上查询:https://www.sqlite.org 得到如下信息:

Optional LIMIT and ORDER BY clauses:

If SQLite is compiled with the SQLITE_ENABLE_UPDATE_DELETE_LIMIT compile-time option, then the syntax of the DELETE statement is extended by the addition of optional ORDER BY and LIMIT clause SQLITE_ENABLE_UPDATE_DELETE_LIMIT

This option enables an optional ORDER BY and LIMIT clause on UPDATE and DELETE statements.

If this option is defined, then it must also be defined when using the Lemon parser generator tool to generate a parse.c file. Because of this, this option may only be used when the library is built from source, not from the amalgamation or from the collection of pre-packaged C files provided for non-Unix like platforms on the website. 

这解释了为啥terminal中的SQlite3是好用的,但是QT的查询失败了,应该是QT下的SQlite3没有使用SQLITE_ENABLE_UPDATE_DELETE_LIMIT编译,我尝试了Qt的Sqlite3 select搭配order by、limit,select是没有问题的。
考虑到跨平台,我还是用文件读写吧,否则SQLite3编译就够我折腾了。

查看评论

QT5下SQLite的增删改查示例代码

Qt5下使用SQLite的示例代码
  • lee353086
  • lee353086
  • 2016年08月10日 13:17
  • 2503

Qt中SQLite3的增、删、改、查操作

QT对数据库具有完善的支持,不需要加任何其他插件就可以直接使用,但是如果你要是加了sqlite3插件,调用数据库就跟直接调用一个驱动一样,直接调用接口函数:open、close、……,换言之QT自带的...
  • bzhxuexi
  • bzhxuexi
  • 2015年11月25日 10:13
  • 6024

Qt操作SQLite数据库——创建、打开、关闭、增加、删除和修改操作

QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持。     QSqlDatabase对象象征了数据库的关联。...
  • qinpanke
  • qinpanke
  • 2016年04月01日 18:08
  • 5956

Sqlite3递归查询,分页查询

使用Sqlite3实现递归查询(包括向上递归,向下递归)
  • sisyphus_z
  • sisyphus_z
  • 2015年03月17日 10:07
  • 2530

关于时间段查询分页问题

 求助:本人需一个时间段查询数据库,查询结果实现分页显示。怎样写代码?本人希望的代码是ASP 的。...
  • rain520
  • rain520
  • 2006年03月27日 17:43
  • 541

QT上使用Sqlite3

官网上的sqlite最新是sqlite3的版本,下载了Realese版本的源代码
  • ziacke
  • ziacke
  • 2014年11月11日 16:09
  • 1081

sqlite 分页的大坑啊

今天使用sqlite分页查询,也就是 SELECT [distinct] heading    FROM tables    WHERE predicate    GROUP ...
  • xujinyang1234
  • xujinyang1234
  • 2013年11月27日 13:34
  • 4680

QT 操作SQLITE3

下载网址:http://www.sqlite.org/download.html windows 下下载 sqlite-tools-win32-x86-31...
  • du_bingbing
  • du_bingbing
  • 2016年08月05日 17:26
  • 1186

qt实现sqlite3的级联删除

1.需求有两张表,条码表和产品详情表,条码表中的rfid为产品表中的rfid外键,要求删除产品表中的相关条目时能实现条码表的级联删除2.解决使用qt中的sqlite3自带的级联删除解决这个需求...
  • zhang_ruiqiang
  • zhang_ruiqiang
  • 2015年07月28日 15:26
  • 899

Ubuntu 15.04 安装配置 Qt + SQLite3

序最近需要在Ubuntu下使用Qt开发项目,选择简单小巧的SQLite数据库,现将安装配置以及简单操作记录如下,以便日后查阅。安装QtCMake和Qt Creator是Linux下开发C++程序的神器...
  • fly_yr
  • fly_yr
  • 2015年11月18日 10:21
  • 2218
    个人资料
    持之以恒
    等级:
    访问量: 37万+
    积分: 9420
    排名: 2417
    我的链接
    最新评论