1. SQLite数据库连接与初始化
任务目标
创建一个Qt Widgets应用,使用QSqlDatabase连接SQLite数据库文件,并在连接成功后执行CREATE TABLE语句初始化一张用户信息表。程序启动时自动完成连接与建表,并在控制台输出关键状态信息,便于验证。
环境依赖
Qt 5.15或更高版本(含Qt Sql模块)。在项目文件.pro中添加:
QT += core gui sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
完整实现代码
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
// 1. 添加SQLite数据库驱动并设置连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
// 2. 打开数据库连接
if (!db.open()) {
qCritical() << "数据库连接失败:" << db.lastError().text();
return 1;
}
qDebug() << "数据库连接成功";
// 3. 初始化表结构
QSqlQuery query;
const QString createTableSql = QStringLiteral(
"CREATE TABLE IF NOT EXISTS users ("
" id INTEGER PRIMARY KEY AUTOINCREMENT,"
" username TEXT NOT NULL UNIQUE,"
" email TEXT NOT NULL,"
" created_at DATETIME DEFAULT CURRENT_TIMESTAMP"
")");
if (!query.exec(createTableSql)) {
qCritical() << "建表失败:" << query.lastError().text();
db.close();
return 1;
}
qDebug() << "数据表 users 初始化完成";
// 4. 验证表是否存在
QSqlQuery checkQuery;
if (checkQuery.exec("SELECT name FROM sqlite_master WHERE type='table' AND name='users'")
&& checkQuery.next()) {
qDebug() << "验证通过: users 表已存在";
} else {
qCritical() << "验证失败: 未找到 users 表";
db.close();
return 1;
}
db.close();
return 0;
}
运行与验证
编译运行:
qmake
make
./demo
验证方法:
- 程序输出以下三行日志即表示成功:
数据库连接成功
数据表 users 初始化完成
验证通过: users 表已存在 - 运行目录下生成
test.db文件,可用sqlite3 test.db ".schema users"查看表结构,应包含id、username、email、created_at四个字段。
预期输出(与代码逻辑严格对应):
数据库连接成功
数据表 users 初始化完成
验证通过: users 表已存在
关键说明
- 使用
CREATE TABLE IF NOT EXISTS保证重复运行不会报错,实现幂等初始化。 - 若需在Qt Widgets工程中使用,将
main函数替换为QApplication即可,数据库逻辑不变。 - SQLite驱动
QSQLITE由Qt的SQL插件提供,需确保Qt安装时包含该模块。