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

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

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

DataBase.h头文件

#pragma once

#include <QObject>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlError>
#include "client_global.h"

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(int 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(name+".db");
        m_DataBase.setDatabaseName(QCoreApplication::applicationDirPath()+"//"+ name);
    }
    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;
        device.name = query.value(0).toInt();
        device.score = query.value(1).toString();
        device.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;
}

原文地址:https://www.cnblogs.com/tingtaishou/p/11994480.html

时间: 2024-08-27 17:54:42

QT 创建本地数据库(SQLite数据库)存储数据的相关文章

【Android】13.0 第13章 创建和访问SQLite数据库&mdash;本章示例主界面

分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 Android 内置了三种数据存取方式:SQLite数据库.文件.SharedPreferences. 这一章我们主要学习如何使用SQLite数据库存取数据. 1.SQLite是个什么档次的数据库 SQLite是一种免费的.开源的数据库,由于它独特的设计(把各种数据类型都转换为它自己内部处理的5种类型)导致其占用内存极少,因此很多项目都喜欢使用它. Android集成了SQLite并内置了专门对SQLite操作

Qt for Android 打包 SQLite 数据库

Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面了, QT在打包apk的时候会自动打包这个目录里面的东西进去的  本文用菊子曰发布

数据库管理系统之存储数据:磁盘和文件

9.1 存储层次 计算机的存储是按照层次组织的.顶层是主存储器,由高速缓存和主存组成,并提供数据的快速访问.接下去是第二级存储器,由较慢的磁盘等设备组成.第三级存储器是最慢的存储设备,如光盘和磁带. 磁带是相对便宜的存储设备,能存储大容量的数据,主要缺点是磁带是顺序存取设备,必须顺序的经过所有的数据,而不能直接访问磁带的某一位置,因此磁带不适合用于存储操作型数据或频繁存取的数据,磁带主要用于阶段性的操作型数据的备份. 磁盘支持对给定地址的直接访问,被广泛用于数据库应用.数据以磁盘块为单位存储在磁

从零开始学android&lt;数据存储(4)Sqlite数据库存储.三十八.&gt;

从前几章我们分别学习了属性文件存储输数据,内储存存储数据,和外部储存存储数据,今天我们来学习一下android 轻量级数据库Sqlite数据库的数据存储 首先必须了解SQLiteOpenHelper SQLiteDatabase类本身只是一个数据库的操作类,但是如果要想进行数据库的操作,还需要一个android.database.sqlite.SQLiteOpenHelper类帮助下才可以取得进行,但是,SQLiteOpenHelper类是一个抽象类,所以要使用的时候需要定义其子类,并且在子类中

详解Android中的SQLite数据库存储

前言 在Android中存储数据的方式有很多种,其中使用SQLite数据库是存储结构化数据的最佳选择.幸运的是,Android中默认提供了对SQLite的支持,这就使得在Android中使用SQLite数据库变得格外方便. 支持的数据类型 SQLite是一款轻量级的数据库,其支持的数据类型也很简单,主要有以下几种: text:字符类型 real:浮点类型 integer:整数类型 blob:二进制数据类型 创建数据库 SQLite数据库的使用始于SQLiteOpenHelper这个抽象类.我们需

Android学习笔记--Sqlite数据库

前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个轻量型的数据库SQLite数据库,使得本地的数据持久化有了一个质的飞跃. 通过前两天上课听老师讲解,和课下自己看书总结,想在博客上把自己对于SQLite数据库的理解做一下总结,也是方便之后的复习.Android为了让我们能够更加方便的管理数据库,专门提供了SQLiteOpenHelper帮助类,这个

在Android程序中使用已有的SQLite数据库

已经将这篇文章迁移至 Code问答,你也能够到这里查看这篇文章,请多多关注我的新技术博客CodeWenDa.com 在中文搜索中,没有找到一篇比較好的关于怎样在Android应用中使用自己事先创建好的数据库的文章,于是在谷歌上找到这篇英文文章,依照它的步骤,測试成功.决定把这篇文章大致的翻译一下,想看原文的能够点击这里:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ .

SQLite数据库基本操作

SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制文件存在即可开始创建.连接和使用数据库.如果您正在寻找一个嵌入式数据库项目或解决方案,SQLite是绝对值得考虑. 目录 SQLite数据库(一):基本操作... 1 目录... 1 一.SQLite介绍... 2 1.    什么是SQLit

android之SQLite数据库应用(二)

今天让我们总结下SQLite数据库在android系统中的应用.首先来看一些数据库的介绍: SQLite数据库是一种无类型的数据库,这就代表你可以保存任何类型的数据到任何表中的任何列哦,无论这个表在create的时候该列被声明成什么类型.因为SQLite在执行数据库建表语句的时候,会自动的将类型忽略的哦. 它是一种用C语言编写的嵌入式数据库,它是一个轻量级的数据库,在一些基础简单的语句处理上要比oracle/mysql快很多,而且其对内存的要求很低. 注意:这里一定要注意,SQLite数据库在一