注意: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;
}

最新文章

  1. JMeter--二、在Windows环境上搭建wordpress
  2. treeview所有节点递归解法(转+说明)或者说递归的实际应用
  3. [Machine-Learning] K临近算法-简单例子
  4. Android真机访问PC端服务器
  5. Eclipse工作常见问题总结
  6. 解读Unity中的CG编写Shader系列七(不透明度与混合)
  7. php中防盗链使用.htaccess
  8. STC12C5A60S2片内存储器介绍
  9. PHP利用超级全局变量$_POST来接收表单数据。
  10. 【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及加入、查询
  11. JS放大镜特效(兼容版)
  12. 第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式
  13. JS中的几种函数
  14. VIM编辑器操作命令积累
  15. 拿到月薪30K,必选一些Python好书!
  16. Linux下Redis服务器搭建
  17. leetcode-26.删除重复数组中的重复项
  18. [leetcode]31. Next Permutation下一个排列
  19. 常用SEO优化
  20. 20155307 2016-2017-2 《Java程序设计》第10周学习总结

热门文章

  1. select下拉框多选取值
  2. ICEM-点火器
  3. ICEM-interface相关操作
  4. Learning Conditioned Graph Structures for Interpretable Visual Question Answering
  5. MySQL按日期分组并统计截止当前时间的总数(实例教程)
  6. 清除input的历史记录
  7. idea 报错javax/xml/bind/DatatypeConverter
  8. Dart自定义库、系统库和第三方库
  9. spring boot集成Websocket
  10. ROS Software update