Qt学习17——初识数据库SQLite(中)
2017-10-24 16:24
330 查看
SQLite的操作
摘要:主要介绍SQLite的基本操作(查询、插入、修改、删除)用QSqlTableModel和QSqlQuery的分别实现。数据库使用 Navicat for SQLite(一个数据库管理工具) 进行查看和管理。一、查询
查询title = 'Dapartures'的一行数据。
代码实现:
@sqlconnection.cpp bool 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.cpp bool 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.cpp bool 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.cpp bool 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, b8a9 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学习5:数据库,sqlite相关
- iOS学习之sqlite的创建数据库,表,插入查看数据
- iOS学习之sqlite的创建数据库,表,插入查看数据
- 数据库 sqlite 学习
- QT学习:根据数据库的内容动态添加Button
- Android学习---数据库的增删改查(sqlite CRUD)
- Qt数据库判断本地是否已经创建/存在数据库,SQLite
- iOS学习之sqlite的创建数据库,表,插入查看数据
- PostgreSQL数据库日常学习笔记17-事务和锁
- android 数据库 SQLiteOpenHelper和ContentProvider学习笔记---添加数据及显示(一)
- Qt中使用第三方的数据库(Sqlite)存储并读取文件本体
- Android SQLite数据库使用 学习与代码实践
- iOS学习笔记(十五)——数据库操作(SQLite)
- QT学习(五)QT 连接 sqlite
- Qt之操作数据库(SQLite)实例
- cocos2d-x学习笔记17:记录存储2:SQLite基本使用
- Java学习笔记--数据库初识
- QT中数据库(SQLite)的应…
- Android SQLite数据库使用 学习与代码实践