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=);
~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数据库)存储数据的更多相关文章
- 【Android】13.0 第13章 创建和访问SQLite数据库—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 Android 内置了三种数据存取方式:SQLite数据库.文件.SharedPreferences. 这一章我们 ...
- Qt for Android 打包 SQLite 数据库
Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- Xamarin android 的WebClient Json下载并存储本地及sqlite数据库
这一点雕虫小技可能对熟悉的人来说已经不值一提.但是我想,既然这些都是常用的功能,集成在一起做个笔记也有点意义吧. 首先,json 是传递数据的事实标准了.所以先说一下将它从服务器端下载下来..net ...
- Qt 操作SQLite数据库
项目中通常需要采用各种数据库(如 Qracle.SQL Server.MySQL等)来实现对数据的存储.查询等功能.下面讲解如何在 Qt 中操作 SQlite 数据库. 一.SQLite 介绍 Sql ...
- Android数据读取之Sqlite数据库操作
咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作.以一个实例开始吧: 首先,上图,看看做成后的效果: 大概描述:类似于浏览器的收藏夹,网站名称,网站地址, ...
- Android学习笔记--Sqlite数据库
前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...
- 操作SQLite数据库
本文摘自: http://docs.blackberry.com/en/developers/deliverables/25108/Creating_and_deleting_SQLite_datab ...
- iOS开发数据库SQLite的使用
iOS系统自带Core Data来进行持久化处理,而且Core Data可以使用图形化界面来创建对象,但是Core Data不是关系型数据库,对于Core Data来说比较擅长管理在设备上创建的数据持 ...
随机推荐
- tecplot当中共用一个legend进行对比
原版视频下载地址链接: https://pan.baidu.com/s/1nvHa0kx 密码: q33e
- Java 8 新特性总结
一.Java 8 Lambda表达式 Lambda表达式,也称为闭包,它是推动Java 8发布的最重要新特性. Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法). 1.1 语法 使用 ...
- orchestrator的安装和配置
介绍 在MySQL高可用架构中,目前使用比较多的是Percona的PXC,Galera以及MySQL 5.7之后的MGR等,其他的还有的MHA,今天介绍另一个比较好用的MySQL高可用复制管理工具:O ...
- [JDBC/Oracle]设置Statement.setQueryTimeout(seconds)并不好用 原因:环境问题
对比实验:https://www.cnblogs.com/xiandedanteng/p/11960320.html 注:setQueryTimeout语句还是好用的,但有些环境不支持,下文是在单位虚 ...
- MyBatis:MyBatis操作MySQL存储过程
一 . 数据库中创建存储过程,并查看创建结果 1.创建存储过程 DROP procedure IF EXISTS net_procedure_request; DELIMITER $$ )) BEGI ...
- Flutter ------- WebView加载网页
在Flutter 加载网页?也是有WebView的哦,和Android一样 1.添加依赖 dependencies: flutter_webview_plugin: ^0.2.1+2 2.导入库 im ...
- vs2017在前端页面使用F12无法转到js脚本函数定义
这样设置后就可以正常使用了
- 国人开发的api测试工具 ApiPost
挺好用的 ApiPost https://www.apipost.cn/download.html 需要注册,免费试用.感觉比postman好用
- flutter Form表单
import 'package:flutter/material.dart'; class FormDemo extends StatelessWidget { @override Widget bu ...
- fkutter Stepper步骤指示器
一个Material Design 步骤指示器,显示一系列步骤的过程 import 'package:flutter/material.dart'; class StepperDemo extends ...