Qt学习17——初识数据库SQLite(中)
来源:互联网 发布:eui魔兽盒子mac版 编辑:程序博客网 时间:2024/05/17 02:33
SQLite的操作
摘要:主要介绍SQLite的基本操作(查询、插入、修改、删除)用QSqlTableModel和QSqlQuery的分别实现。数据库使用 Navicat for SQLite(一个数据库管理工具) 进行查看和管理。
一、查询
查询title = 'Dapartures'
的一行数据。
代码实现:
@sqlconnection.cppbool SqlConnection::SelectData() { /***model operation***/ QSqlTableModel model; model.setTable("music"); model.setFilter("title = 'Dapartures'"); if (model.select()) { for (int i = 0; i < model.rowCount(); ++i) { //print operation record QSqlRecord record = model.record(i); QString title = record.value("title").toString(); QString artist = record.value("artist").toString(); qDebug() <<"select:"<< title << " - " << artist; } } /***SQL operation***/ // QSqlQuery query; // query.exec("SELECT * FROM music WHERE title = 'Dapartures'"); return true;}
运行结果:
"小城故事" | "邓丽君""她" | "朱婧汐""Dapartures" | "EGOIST"select: "Dapartures" - "EGOIST"
建立数据库和录入的数据还是使用上一篇中讲述的方法。这里实例化一个QSqlTableModel作为数据库的model,此时对数据库的操作可以使用非SQL语句进行,同时更方便与view的结合。这里select操作是通过setFilter()实现的。代码中,QSqlRecord用于记录数据库的操作,这里我将它打印出来便于查看。另外,我也附上了SQL语法实现的代码(注释部分)
二、插入
在当前目录底部插入一行数据: title = "南方姑娘"
artist = "赵雷"
代码实现:
@sqlconnection.cppbool SqlConnection::InsertData() { /***model operation***/ QSqlTableModel model; model.setTable("music"); int row = 0; model.insertRows(row, 1); model.setData(model.index(row, 1), QString::fromLocal8Bit("南方姑娘")); model.setData(model.index(row, 2), QString::fromLocal8Bit("赵雷")); model.submitAll(); //print operation record QSqlRecord record = model.record(0); QString title = record.value("title").toString(); QString artist = record.value("artist").toString(); qDebug() <<"insert:"<< title << ":" << artist; /***SQL operation***/ // QSqlQuery query; // query.exec("INSERT INTO music (title, artist) VALUES ('New title', 'New artist')"); return true;}
运行结果:
"小城故事" | "邓丽君""她" | "朱婧汐""Dapartures" | "EGOIST"insert: "南方姑娘" : "赵雷"
这里用row
选定插入的目录,insertRows()
可以插入多行,这里插入一行。setData()
设置插入的位置。
三、修改
将id = 1
的数据title
值由"小城故事"
修改为"新小城故事"
。
代码实现:
@sqlconnection.cppbool SqlConnection::UpdateData() { /***model operation***/ QSqlTableModel model; model.setTable("music"); model.setFilter("id = 1"); if (model.select()) { if (model.rowCount() == 1) { QSqlRecord record = model.record(0); record.setValue("title", QString::fromLocal8Bit("新小城故事")); model.setRecord(0,record); model.submitAll(); //print operation record QString title = record.value("title").toString(); QString artist = record.value("artist").toString(); qDebug() <<"update:"<< title << ":" << artist; } } /***SQL operation***/ // QSqlQuery query; // query.exec("UPDATE music SET title = 'New title' WHERE id = 1"); return true;}
运行结果:
"小城故事" | "邓丽君""她" | "朱婧汐""Dapartures" | "EGOIST"update: "新小城故事" : "邓丽君"
四、删除
删除id = 2
的一行数据。
代码实现:
@sqlconnection.cppbool SqlConnection::DeleteData() { /***model operation***/ QSqlTableModel model; model.setTable("music"); model.setFilter("id = 2"); if (model.select()) { //print operation record QSqlRecord record = model.record(0); QString title = record.value("title").toString(); QString artist = record.value("artist").toString(); qDebug() <<"delete:"<< title << ":" << artist; model.removeRows(0,1); model.submitAll(); } /***SQL operation***/ // QSqlQuery query; // query.exec("DELETE FROM music WHERE id = 4"); return true;}
运行结果:
"小城故事" | "邓丽君""她" | "朱婧汐""Dapartures" | "EGOIST"delete: "她" : "朱婧汐"
五、说明
在上面的增、删、改、查操作中,可以发现似乎使用SQL语句比使用高级接口QSqlTableModel代码要简洁得多。但是在操作中文字符时还是比较麻烦的,因为操作语法中是不能直接输入中文字符的,我们可以使用prepare()
和addBingValue()
来插入数据,例如:
QSqlQuery query; query.prepare("INSERT INTO music (title, artist) VALUES (?,?)"); QStringList titles; titles <<QString::fromLocal8Bit("小城故事")<< QString::fromLocal8Bit("她") << "Dapartures"; query.addBindValue(titles);
同时Qt是不会对SQL语句进行拼写检查的。而使用QSqlTableModel则没有这两个个问题,因为它本身就是使用的高级接口,不直接使用SQL语句,完全可以输入Qt支持的任意字符,而且所有函数操作都有Qt的拼写检查。另外,虽然SQL语法简洁,但在数据库的可视化上,易于使用的model将更具优势。
- Qt学习17——初识数据库SQLite(中)
- Qt学习17——初识数据库SQLite(上)
- Qt数据库(sqlite) — 总结
- Qt数据库(sqlite) — 总结
- qt中SQLite数据库编程
- Qt中使用SQLITE数据库
- QT中使用数据库(SQLite)
- QT:在Qt中使用SQLite数据库
- QT中数据库(SQLite)的应…
- SQLite初识(一)创建数据库
- SQLite初识(二)数据库查询
- SQLite初识(三)数据库升级
- SQLite初识(四)数据库插入数据
- SQLite初识(五)修改数据库数据
- SQLite初识(六)删除数据库数据
- SQLite初识(八)数据库--查询数据
- 初识Sqlite数据库
- Android数据库SQLite-初识
- EF Code First 连接Mysql
- 微信支付(一)
- 关于java发送邮件用例
- Unix/Linux编程-进程
- Linux常用命令搜集
- Qt学习17——初识数据库SQLite(中)
- Mybatis一级、二级缓存
- 如何在调试页面的时候优雅的关闭缓存
- angular添加,查询,等批量操作
- AngularJS购物车功能增加/删除/价格的计算
- Introduction to SIFT (Scale-Invariant Feature Transform)
- Entity Framework 数据生成选项DatabaseGenerated
- 我的购物车
- 阿里巴巴Java开发规约IDEA插件使用