Qt中使用Sqlite

前情提要

由于最近pni项目需要使用到Sqlite存储数据,学习了下在Qt中如何使用Sqlite

使用

头文件准备

首先在.pro文件里加入

QT += sql

然后在.h文件里加入

1
2
3
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>

库函数调用

  • QSqlDatabase::addDatabase() ,添加QSQLITE数据库

  • pniDatabase.setDatabaseName(),设置数据库的保存路径+保存名称

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //create/link pni database
    pniDatabase = QSqlDatabase::addDatabase("QSQLITE");
    QString dbname = QDir::currentPath() + QString("/data/") + QString("pniDataBase.db");
    qDebug() << "dbname:" << dbname;
    pniDatabase.setDatabaseName(dbname);
    if (!pniDatabase.open())
    qDebug() << "pni Database.open failed." << pniDatabase.lastError();
    else
    qDebug() << "Succeed to connect pni Database.";
  • QSqlQuery sql_samples(pniDatabase),用来执行sql语句,有以下两种方法

    可以直接用.exec(const QString& query)执行query里面的sql语句内容

    也可以使用.prepare(const QString& query), .exec()预先输入query里的sql语句,再加以执行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    QSqlQuery sql_samples(pniDatabase);

    //Create Table SamplesInfo
    if(!sql_samples.exec("CREATE TABLE SamplesInfo ("
    "id INTEGER PRIMARY KEY AUTOINCREMENT ,"
    "uuid STRING UNIQUE NOT NULL, path STRING NOT NULL,"
    "name STRING NOT NULL"
    ");"))
    qDebug() << "Error: Failed to create SamplesInfo table." << sql_samples.lastError();
    else
    qDebug() << "SamplesInfo table created!";
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //插入数据库
    QSqlQuery sql_samples(pniDatabase);
    sql_samples.prepare("INSERT INTO SamplesInfo (id, uuid, path, name)"
    "VALUES (:id, :uuid, :path, :name)");

    sql_samples.bindValue(":uuid", QString::fromStdString(Information::getInstance()->sampleInfo.uuid));
    sql_samples.bindValue(":path", QString::fromStdString(Information::getInstance()->PETSavePath));
    sql_samples.bindValue(":name", createSamplesDir);
    if (!sql_samples.exec())
    qDebug() << "failed to insert into SamplesInfo Table" << sql_samples.lastError();
    else qDebug() << "succeed to insert into SamplesInfo Table";

    第二种方法可以在后续绑定sql语句里面的数值,使其看起来更优美。

Ubuntu小工具

生成的.db数据库文件在Ubuntu不方便直接打开,可以下载Ubuntu sqlite可视化工具Sqlite Browser