需要在 *.pro
项目文件里面添加 QT += sql
相关代码:
dbmanager.h
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QSqlQuery>
class DBManager
{
public:
static bool init(QString dbName = QString("localdb.db"));
static bool runSql(QString sql);
private:
static DBManager *m_gDBMangaer;
DBManager(QString dbName);
QSqlDatabase m_database;
};
dbmanager.cpp
#include "dbmanager.h"
DBManager *DBManager::m_gDBMangaer = NULL;
DBManager::DBManager(QString dbName)
{
m_database = QSqlDatabase::addDatabase("QSQLITE"); // 使用sqlite数据库
m_database.setDatabaseName(dbName); // 数据库名称
if(!m_database.open()) { // 如果数据库不存在则创建并打开,如果已存在则打开
qCritical()<<"Fail to create or connect database. "<<m_database.lastError();
} else {
qDebug()<<"Success to connect local database. "<<dbName;
}
}
bool DBManager::init(QString dbName) {
if(m_gDBMangaer == NULL) {
m_gDBMangaer = new DBManager(dbName);
}
if(m_gDBMangaer->m_database.isOpen())
return true;
else
return false;
}
bool DBManager::runSql(QString sql) {
QSqlQuery query;
if(query.exec(sql) == false) {
qCritical()<<"Fail to run sql: "<<sql<<" | "<<m_gDBMangaer->m_database.lastError();
return false;
} else {
qDebug()<<"run sql successfully. "<<sql;
return true;
}
}
测试代码
// 打开数据库(如果不存在则创建后再打开)
DBManager::init("whaledb.db");
// 创建表格
DBManager::runSql("create table person (id int primary key, firstname varchar(20), lastname varchar(20))");
// 插入数据
DBManager::runSql("insert into person values(103, 'Lars', 'Gordon')");
// 查询数据
QSqlQuery query;
query.exec("select * from person");
while(query.next()) {
qDebug()<<query.value(0).toInt();
qDebug()<<query.value(1).toString();
qDebug()<<query.value(2).toString();
}