Qt中使用Sqlite
前情提要
由于最近pni项目需要使用到Sqlite存储数据,学习了下在Qt中如何使用Sqlite
使用
头文件准备
首先在.pro文件里加入
QT += sql
然后在.h文件里加入
1 |
库函数调用
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
11QSqlQuery 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