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

验证方法:

  1. 程序输出以下三行日志即表示成功:
    数据库连接成功
    数据表 users 初始化完成
    验证通过: users 表已存在
  2. 运行目录下生成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安装时包含该模块。