QT开发 - 本地数据库

需要在 *.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();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值