SQL 是操作数据库的标准语言,适用于MySQL、Oracle、DB2 等数据库。Qt 的 QtSql 模块基于 SQL 提供了相关数据库操作函数,因此得以使这些数据库操作起来大同小异。下面的以SQLite数据库为例记录,生成的数据库可通过SQLiteStudio进行可视化操作。
添加模块
- 在.pro文件中添加QT += sql
- 在头文件添加
#include <QSqlQuery>
#include <QSqlError>
添加数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("MyData.db3");
打开数据库
if (!db.open())
{
qDebug()<< "ERROR:"<<db.lastError().text();
return false;
}
创建表
这里创建一张含义整型、字符串、二进制数据3种存储类型字段的表
QSqlQuery query;
query.exec("CREATE TABLE students ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name VARCHAR NOT NULL, "
"score INTEGER NOT NULL, "
"photo BLOB NOT NULL)");
增加记录
query.prepare("INSERT INTO students (name, score, photo) "
"VALUES (:name, :score, :photo)");
query.bindValue(":name", "wangwu");
query.bindValue(":score", 99);
query.bindValue(":photo", QByteArray("BinData", 8));
query.exec();
删除记录
query.exec("DELETE FROM students WHERE id = 1");
修改记录
query.prepare("UPDATE students SET photo = :photo WHERE name = 'wangwu'");
query.bindValue(":photo", QByteArray("NewBinData", 11));
query.exec();
查找记录
query.exec("SELECT * FROM students WHERE name = 'wangwu'");
while (query.next())
{
int id = query.value(0).toInt();
QString name = query.value(1).toString();
QByteArray photo = query.value(3).toByteArray();
}
关闭数据库
db.close();