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来说比较擅长管理在设备上创建的数据持 ...
随机推荐
- 一个想要拥有正常的F1~F12的联想小新潮
联想如何切换至正常的F1~F12 Fn+Fx的生活让我疲倦,实在难受,就开始了尝试关闭Fn 问题一:无法打开BIOS设置界面 重启,在开机界面时,按F2???顺利开机-(相较于台式机开机时,可以按F2 ...
- 三大框架 之 Spring-Aop
目录 AOP AOP简介 开发存在 的问题 JDK动态代理 cglib动态代理 Spring的AOP简介 AOP相关术语 Joinpoint:连接点 Pointcut:切入点 Advice:通知 In ...
- Perl关于分椰子的趣味问题
话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有有棵椰子树,还有一只猴子! 大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先晚上 ...
- Java-Maven(九):Maven 项目pom文件引入工程根目录下lib文件夹下的jar包
由于项目一些特殊需求,pom依赖的包可能是非Maven Repository下的包文件,因此无法自己从网上下载.此时,我们团队git上对该jar使用. Maven项目pom引入lib下jar包 在ec ...
- win10 'make' 不是内部或外部命令
win10 解决“ 'g++' 不是内部或外部命令,也不是可运行的程序或批处理文件”的问题 https://www.jianshu.com/p/9bffbaf12bed windows下提示make不 ...
- .gitignore忽略多层文件夹用**
一.写法 **/bin/Debug/ 前面的两个*号代表任意多层上级文件夹 需要 git 1.8.2 及其以上的版本才支持 如何查看当前版本并且升级(windows) 二.如何升级 git是2.14. ...
- 【JDBC】使用properties连Oracle数据库,使用DatabaseMetaData获取字段的注释
简单的打铁代码如下: package com.hy.propertyConn; import java.sql.Connection; import java.sql.DatabaseMetaData ...
- nodejs设置淘宝镜像
nodeJS的资源仓库在国内使用过程中,偶尔会遇到各种资源问题,通常设置为淘宝的镜像,网上很多说法是安装淘宝镜像,即$ npm install -g cnpm --registry=https://r ...
- System.Runtime.Serialization.cs
ylbtech-System.Runtime.Serialization.cs 允许对象控制其自己的序列化和反序列化过程. 1.返回顶部 1. #region 程序集 mscorlib, Versio ...
- TypeScript泛型类 - 把类作为参数类型的泛型类
/* TypeScript泛型类 - 把类作为参数类型的泛型类 */ /* 泛类:泛型可以帮助我们避免重复的代码以及对不特定数据类型的支持(类型校验),下面我们看看把类当做参数的泛型类 1.定义个类 ...