• QT 创建本地数据库(SQLite数据库)存储数据


    注意:QT自带SQLITE数据库,不需要再安装

    1.创建一个包含创建、查询、修改和删除数据库的数据库类(DataBase)

    DataBase.h头文件

    #pragma once
    
    #include <QObject>
    #include <QtSql/QSqlDatabase>
    #include <QtSql/QSqlQuery>
    #include <QtSql/QSqlDriver>
    #include <QtSql/QSqlError>

    struct StudentData
    {
      QString name;
      int score;
      QString grade;
    }; class DataBase : public QObject { Q_OBJECT public: DataBase(QString name,QObject *parent=0); ~DataBase();
    public:
    bool insertData(StudentData data); bool deleteData(QString name); bool getDataByName(int name, StudentData & data); bool getDataList(QList<StudentData> & list);
       bool update();
    private: QSqlDatabase m_DataBase; private: bool initTable(); bool isExistTable(QString table); bool createTable(QString table); };

    DataBase.cpp源文件

    #include "XDataBase.h"
    #include <QCoreApplication>
    #include <QDebug>
    #include <QSqlRecord>
    
    
    DataBase::DataBase(QString name, QObject *parent)
        : QObject(parent)
    {
        
        if (QSqlDatabase::contains(name)) {
    
            m_DataBase = QSqlDatabase::database(name);
        }
        else {
    
            m_DataBase = QSqlDatabase::addDatabase("QSQLITE");
            m_DataBase.setDatabaseName(QCoreApplication::applicationDirPath()+"/"+ name+".db");
        }
        initTable();
    }
    
    DataBase::~DataBase()
    {
    }
    
    bool DataBase::initTable()
    {
        if (!m_DataBase.open()) {
            return false;
        }
    
        if (!isExistTable("students")) {
            createTable("students");
        }
        return false;
    }
    
    bool DataBase::isExistTable(QString table)
    {
        bool bRet = false;
        if (!m_DataBase.open()) {
            return bRet;
        }
        QSqlQuery query(m_DataBase);
        query.exec(QString("select count(*) from sqlite_master where type='table' and name='%1'").arg(table));    //关键的判断      
        if (query.next())
        {
            if (query.value(0).toInt() > 0)
            {
                bRet = true;
            }
        }
        return false;
    }
    
    bool DataBase::createTable(QString table)
    {
        if (!m_DataBase.open()) {
            return false;
        }
    
        QSqlQuery query(m_DataBase);
        if (table == QString("students")) {
    
            bool success = query.exec("CREATE TABLE students ("
                                        "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                                        "name VARCHAR(40) NOT NULL, "
                                        "score INTEGER NOT NULL, "
                                        "grade VARCHAR(40) NOT NULL)");
    
            if (success) {
                return true;   //新建数据库成功
            }
            else {
                QSqlError lastError = query.lastError();
                QString err = lastError.driverText();
                return false;
            }
        }
        else {
            return false;
        }
    }
    
    bool DataBase::insertData(StudentData data)
    {
        if (!m_DataBase.open()) {
            return false;
        }
        QSqlQuery query(m_DataBase);
    
        bool success = query.exec(QString("INSERT INTO students (name, score,class) "
            "VALUES (%1, %2, %3)").arg(data.name)
                                  .arg(data.score)
                                  .arg(data.grade));
            
        if (!success) {
    
            QSqlError lastError = query.lastError();
            QString err = lastError.driverText();
            return false;
        }
        return true;
    }
    
    bool DataBase::deleteData(QString name)
    {
        if (!m_DataBase.open()) {
            return false;
        }
        QSqlQuery query(m_DataBase);
        query.prepare(QString("DELETE FROM students WHERE name='%1'").arg(name));
        query.exec();
        return false;
    }
    
    bool DataBase::getDataByName(int name, StudentData & data)
    {
        if (!m_DataBase.open()) {
            return false;
        }
    QSqlQuery query(m_DataBase); query.prepare(QString(
    "SELECT * FROM students WHERE name='%1'").arg(name)); query.exec(); QSqlRecord rec = query.record(); if (query.next()) { data.name = query.value(0).toString(); data.score = query.value(1).toInt(); data.grade = query.value(2).toString(); return true; } return false; } bool DataBase::getDataList(QList<StudentData>& list) { if (!m_DataBase.open()) { return false; } QSqlQuery query(m_DataBase); query.prepare(QString("SELECT * FROM students")); query.exec(); QSqlRecord rec = query.record(); while (query.next()) { StudentData data; data.name = query.value(0).toInt(); data.score = query.value(1).toInt(); data.grade = query.value(2).toInt(); list.append(data); return true; } return false; } bool DataBase::update() { if (!m_DataBase.open()) { return false; } QSqlQuery query(m_DataBase); query.prepare("UPDATE students SET score = 100 , name = '小A'"); query.exec(); return false; }

    调用:

    XClientApp.h头文件

    #pragma once
    
    #include <QApplication>
    #include <DataBase.h>
    #include "ServerAPI.h"
    #define clientApp static_cast<XClientApp*>(QCoreApplication::instance())
    
    class XClientApp : public QApplication
    {
        Q_OBJECT
    
    public:
        XClientApp(int argc, char *argv[]);
        ~XClientApp();
        DataBase* getDataBase();
        ServerAPI* getServerAPI();
        QString getAppName();
    private:
        void setFont(QString font);
        void setStyle();
    private:
        DataBase* m_pDataBase;
        ServerAPI* m_pServerAPI;
    signals:
        void sglSystemMessage(QString type, QString data);
    };

    XClientApp.cpp源文件

    #include "XClientApp.h"
    
    XClientApp::XClientApp(int argc, char *argv[])
        : QApplication(argc, argv)
    {
        
         m_pDataBase = new DataBase("xclient", this);
         setWindowIcon(QIcon(":/Images/Resources/朱砂古镇.ico"));//可执行程序图标
         setStyle();
         m_pServerAPI = new ServerAPI(this);   //注意有重载
    }
    
    DataBase * XClientApp::getDataBase()   //获取本地数据库并进行操作
    {
        return m_pDataBase;
    }
  • 相关阅读:
    性能参考指标
    Java Native Interface 二 JNI中对Java基本类型和引用类型的处理
    Java Native Interface 编程系列一
    HTTP的报文与状态码
    [译]Android调整图像大小的一些方法
    Android多线程通信机制
    Android四大组件知识整理
    Java多态与反射
    23种设计模式的优点与缺点概况
    Android应用性能优化
  • 原文地址:https://www.cnblogs.com/tingtaishou/p/11994480.html
Copyright © 2020-2023  润新知