注意: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=);
~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().toInt() > )
{
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().toString();
data.score = query.value().toInt();
data.grade = query.value().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().toInt();
device.score = query.value().toString();
device.grade = query.value().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;
}

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

  1. 【Android】13.0 第13章 创建和访问SQLite数据库—本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 Android 内置了三种数据存取方式:SQLite数据库.文件.SharedPreferences. 这一章我们 ...

  2. Qt for Android 打包 SQLite 数据库

    Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...

  3. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  4. Xamarin android 的WebClient Json下载并存储本地及sqlite数据库

    这一点雕虫小技可能对熟悉的人来说已经不值一提.但是我想,既然这些都是常用的功能,集成在一起做个笔记也有点意义吧. 首先,json 是传递数据的事实标准了.所以先说一下将它从服务器端下载下来..net ...

  5. Qt 操作SQLite数据库

    项目中通常需要采用各种数据库(如 Qracle.SQL Server.MySQL等)来实现对数据的存储.查询等功能.下面讲解如何在 Qt 中操作 SQlite 数据库. 一.SQLite 介绍 Sql ...

  6. Android数据读取之Sqlite数据库操作

    咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作.以一个实例开始吧: 首先,上图,看看做成后的效果: 大概描述:类似于浏览器的收藏夹,网站名称,网站地址, ...

  7. Android学习笔记--Sqlite数据库

    前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...

  8. 操作SQLite数据库

    本文摘自: http://docs.blackberry.com/en/developers/deliverables/25108/Creating_and_deleting_SQLite_datab ...

  9. iOS开发数据库SQLite的使用

    iOS系统自带Core Data来进行持久化处理,而且Core Data可以使用图形化界面来创建对象,但是Core Data不是关系型数据库,对于Core Data来说比较擅长管理在设备上创建的数据持 ...

随机推荐

  1. Chrome 浏览器中查看 webSocket 连接信息

      1.以下代码实现一个webSocket连接,在文本输入框中输入内容,点击发送,通过服务器,返回相同的内容显示在下方. 1 <!DOCTYPE html> 2 <html lang ...

  2. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  3. c++ curl 登陆renren.com (cookie的使用)<转>

    size_t write_callback( void *ptr, size_t size, size_t nmemb, void *stream ) { int len = size * nmemb ...

  4. C# ffmpeg 视频处理格式转换和添加水印

    通过C#调用ffmpeg 将flv格式转换为mp4格式,并添加水印 C#调用ffmpeg的方法封装如下: /// <summary>/// 视频处理器ffmpeg.exe的位置/// &l ...

  5. Java实现简单RPC框架(转)

    一.RPC简介 RPC,全称Remote Procedure Call, 即远程过程调用,它是一个计算机通信协议.它允许像本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).H ...

  6. Dynamic Filter Networks

    Dynamic Filter Networks 2019-06-10 11:29:19 Paper:http://papers.nips.cc/paper/6578-dynamic-filter-ne ...

  7. 【Java文件】按UTF-8编码读取文本文件(逐行方式),排序,打印到控制台

    代码: package findJavaMemberFunction; import java.io.BufferedReader; import java.io.FileInputStream; i ...

  8. agentzh 的 Nginx 教程(版本 2019.07.31)

    agentzh 的 Nginx 教程(版本 2019.07.31) agentzh 的 Nginx 教程(版本 2019.07.31) https://openresty.org/download/a ...

  9. git如何将旧commit的相关notes复制到新commit?

    答: git notes copy <old-commit> <new-commit>

  10. 代替ESXI的虚拟机解决方案proxmox

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/matengbing/article/de ...