在Qt中,可以使用QSqlDatabase和QSqlQuery等类来连接SQLite数据库,并执行SQL语句来操作数据。下面是一个简单的示例,演示如何将数据存储到SQLite数据库中:
- 在Qt项目中添加sqlite驱动
首先需要确保在Qt项目中已经添加了SQLite驱动库,否则无法连接SQLite数据库。可以在.pro文件中添加以下代码:
QT += sql
- 连接到SQLite数据库
使用QSqlDatabase类连接到SQLite数据库并打开连接:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydatabase.db");
if (!db.open()) {
qDebug() << "Cannot open database: " << db.lastError().text();
return;
}
其中,setDatabaseName()方法指定要打开的SQLite数据库文件名。
- 创建表格
可以使用QSqlQuery类执行CREATE TABLE语句创建一个新表格:
QString createTable = "CREATE TABLE mytable ("
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
"name TEXT,"
"age INTEGER)";
if (!query.exec(createTable)) {
qDebug() << query.lastError().text();
return;
}
上述代码将创建一个名为mytable的表格,包含三个字段:id、name和age。
- 插入数据
使用INSERT INTO语句向表格中插入数据:
QString name = "Tom";
int age = 20;
QString insertData = QString("INSERT INTO mytable(name, age) VALUES('%1', %2)").arg(name).arg(age);
if (!query.exec(insertData)) {
qDebug() << query.lastError().text();
return;
}
上述代码将向mytable表格中插入一条记录,包含name和age两个字段。
- 查询数据
使用SELECT语句从表格中查询数据:
QString selectData = "SELECT * FROM mytable";
if (!query.exec(selectData)) {
qDebug() << query.lastError().text();
return;
}
while (query.next()) {
int id = query.value(0).toInt();
QString name = query.value(1).toString();
int age = query.value(2).toInt();
qDebug() << id << name << age;
}
上述代码将查询mytable表格中所有的记录,并打印每条记录的id、name和age字段。
完整示例代码如下:
#include <QCoreApplication>
#include <QtSql>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// Connect to SQLite database
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydatabase.db");
if (!db.open()) {
qDebug() << "Cannot open database: " << db.lastError().text();
return -1;
}
// Create table
QSqlQuery query(db);
QString createTable = "CREATE TABLE mytable ("
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
"name TEXT,"
"age INTEGER)";
if (!query.exec(createTable)) {
qDebug() << query.lastError().text();
return -1;
}
// Insert data
QString name = "Tom";
int age = 20;
QString insertData = QString("INSERT INTO mytable(name, age) VALUES('%1', %2)").arg(name).arg(age);
if (!query.exec(insertData)) {
qDebug() << query.lastError().text();
return -1;
}
// Select data
QString selectData = "SELECT * FROM mytable";
if (!query.exec(selectData)) {
qDebug() << query.lastError().text();
return -1;
}
while (query.next()) {
int id = query.value(0).toInt();
QString name = query.value(1).toString();
int age = query.value(2).toInt();
qDebug() << id << name << age;
}
return a.exec();
}