回顾:
第一章:Qt的概述
第二章:在Ubuntu编写第一个Qt程序
第三章:Qt的字符串和字符编码
第四章:Qt的信号和槽
第五章:Qt容器窗口(父窗口)
第六章:面向对象的Qt编程
第七章:Qt设计师使用(designer)
第八章:Qt创造器的使用(qtcreator)
第九章:资源和图像
第十章:目录与定时器
第十一章:鼠标和键盘事件

Qt数据库(sqlite)

1、数据库简介//了解

  • 1)概念:数据库是指以一定方式存储在一起,能为多个用户共享,具有仅能小的冗余度的特性,是与应用程序彼此独立的数据集合。
  • 2)数据库相关的术语
    • DB 数据库
    • DBA 数据库管理员
    • DBMS 数据库管理系统
    • RDB 关系型数据库
    • RDBMS 关系型数据管理系统
  • 3)数据库类型
    • 层次式数据库
    • 网络式数据库
    • 关系型数据库
  • 4)常见数据库
    • Oracle,市场占有率50%
    • IBM的DB2,市场占有率20%
    • 微软的SqlServer,市场占有率15%
    • Sun公司的MySQL
    • SQLite,轻量级嵌入式数据库
  • 5)数据库查询语言(SQL)

2、SQLite数据库

2.1、安装SQLite

  • 在线安装(推荐): sudo apt-get install sqlite3
  • 离线安装:sudo dpkg -i sqlite.xx.deb
  • 测试:在终端输入sqlite3,即可进入sqlite的命令操作界面

    使用.exit可以退出控制终端
    注:sqlite3命令行界面可以输入两种指令,一种是sqlite自身的配置和格式控制等相关指令,以"."开头,可以使用".help" 查看这些指令的详细说明;还有一种是SQL指令,实现对数据的增删改查等相关操作。

2.2、常见的sqlite指令

  • 1).database 查看数据库名字和对应的文件
  • 2).tables查看当前数据库包含的数据表
  • 3).schema 查看创建数据表的信息
  • 4).mode 显示模式,设置数据显示模式(list/tabs/column)
  • 5).nullvalue "string" 设置空白位置显示的字符串
  • 6).backuo文件名,备份数据库到指定的文件中
  • 7).exit/.quit 退出
    注:

    • ctrl+L可以清屏
    • SELECT * FROM company;//查看company中全部内容

3、在命令行使用sql命令操作数据库//重点

  • 1)创建数据表,语法:
CREATE TABLE 表名(列名1 类型 约束,列名2 类型 约束,...列名n 类型 约束
);

类型:INT(整型)、TEXT(字符串)、REAL(浮点数)
约束:NOT NULL(非空);UNIQUE(唯一);PRIMARY KEY(主键),包含唯一性,同时可以加快对数据的访问

  • 2)删除表:
DROP TABLE 表名;

注: 慎用,因为数据库表一旦删除,里面包含的数据也将消失

  • 3)插入数据,语法:
INSERT INTO 表名(列名1, 列名2, ..., 列名n)VALUES (数值1, 数值2, ..,数值n);

eg:

insert into student (id, name, scorc) values (10002, "weeks", 98);
  • 4)删除数据,语法:
DELETE FROM 表名 wehere 条件表达式;

eg:

delete from student where id=10002;
  • 5)修改数据,语法:
UPDATE 表名 SET 列名1=新数值, 列名2=新数值.. WHERE 表达式;

eg:

update student set score=100 where id=10001;
  • 6)查询操作,语法
SELECT 列名1, 列名, ..., 列名n FROM 表名;
//或者
SELECT 列名1, 列名, ..., 列名n FROM 表名 WHERE 条件表达式;
//或者
SELECT 列名1, 列名, ..., 列名n FROM 表名 WHERE 条件表达式 ORDER BY 列名 排序方式;//排序方式有ASC(升序),DESC(降序)

eg:

select * from company where salary>=8000 or salary<3000;

4、在Qt中使用Sqlite数据库

  • 1)QSqlDatabase:建立Qt程序和数据库的连接
//添加数据库驱动
QSqlDatebase db = QSqlDatabase::addDatabase("QSQLITE");
//设置数据库的名字,对于sqlite就是".db"数据文件
db.setDatabase("custom.db");
//打开数据库
bool ok = db.open();
  • 2)QSqlQuery:提供SQL命令的操作和执行方法
QSqlQuery query;
QString str("str字符串");
query.exec(str);
  • 3)QSqlQueryModel:执行查询的SQL语句和遍历结果集
QSqlQueryModel *model = new QSqlQueryModel;
//执行select语句并保存结果集到model
model->setQuery("SELECT 语句");
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Salary"));//显示结果QTableView
QTableView *view = new QTableView;
view->setModel(model);
view->show();

案例:学上成绩管理系统

  • SqliteDialog.h
#ifndef SQLITEDIALOG_H
#define SQLITEDIALOG_H#include <QDialog>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlError>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class SqliteDialog; }
QT_END_NAMESPACEclass SqliteDialog : public QDialog
{Q_OBJECTpublic:SqliteDialog(QWidget *parent = nullptr);~SqliteDialog();
private://void createDB(void);//void createTable(void);//void queryTable(void);private slots:void on_sortButton_clicked();void on_insrertButton_clicked();void on_deleteButton_clicked();void on_updateButton_clicked();private:Ui::SqliteDialog *ui;QSqlDatabase db;//QSqlQueryModel model;//
};
#endif // SQLITEDIALOG_H
  • SqliteDialog.cpp
#include "SqliteDialog.h"
#include "ui_SqliteDialog.h"SqliteDialog::SqliteDialog(QWidget *parent): QDialog(parent), ui(new Ui::SqliteDialog)
{ui->setupUi(this);createDB();createTable();queryTable();
}SqliteDialog::~SqliteDialog()
{delete ui;
}// sort slot
void SqliteDialog::on_sortButton_clicked()
{QString value = ui->valueCombox->currentText();QString com = ui->condCombox->currentText();QString str = QString("SELECT * FROM student""ORDER BY %1 %2").arg(value).arg(com);model.setQuery(str);//show resultui->tableView->setModel(&model);
}
//insert slot
void SqliteDialog::on_insrertButton_clicked()
{QSqlQuery query;//get id,name, scoreint id = ui->idEdit->text().toInt();QString name = ui->nameEdit->text();double score = ui->scoreEdit->text().toDouble();QString str = QString("INSERT INTO student""(id, name, score)""VALUES (%1,'%2',%3)").arg(id).arg(name).arg(score);query.exec(str);queryTable();
}
//delete slot
void SqliteDialog::on_deleteButton_clicked()
{QSqlQuery query;//get idint id = ui->idEdit->text().toInt();QString str = QString("DELETE FROM student WHERE id=(%1)").arg(id);query.exec(str);queryTable();
}
//update slot
void SqliteDialog::on_updateButton_clicked()
{QSqlQuery query;//get idint id = ui->idEdit->text().toInt();double score = ui->scoreEdit->text().toDouble();QString str = QString("UPDATE student SET score=(%1) WHERE id=(%2)").arg(score).arg(id);query.exec(str);queryTable();
}//creat databas
void SqliteDialog::createDB(void)
{//create connect wit sqlite database//1)add database drivedb = QSqlDatabase::addDatabase("QSQLITE");//2)database's namedb.setDatabaseName("menu.db");//3)open databaseif(db.open()==false){qDebug() << db.lastError();}
}//create data table
void SqliteDialog::createTable(void)
{QSqlQuery query;QString str = QString("CREATE TABLE student ("" id INT PREMARY KEY,""name TEXT NOT NULL,""score REAL NOT NULL)");//"abc""bcd"==>"abcbcd"//qDebug() << str;query.exec(str);
}//query table data
void SqliteDialog::queryTable(void)
{QString str = QString("SELECT * FROM student");//execute str corresponding sql and save resultmodel.setQuery(str);//show resultui->tableView->setModel(&model);
}

第十二章:Qt数据库(sqlite)相关推荐

  1. 【数据库原理及应用】经典题库附答案(14章全)——第十二章:数据库技术新发展

    [数据库原理及应用]经典题库附答案(14章全)--第一章:数据库基础知识 [数据库原理及应用]经典题库附答案(14章全)--第二章:关系数据库知识 [数据库原理及应用]经典题库附答案(14章全)--第 ...

  2. 【正点原子Linux连载】第二十二章 AP3216C 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 3)全套实验源码+手册+视频下载地址: ...

  3. 系统架构师学习笔记_第十二章_连载

    第十二章  系统安全架构设计 12.1  信息系统安全架构的简单描述 信息安全的特征 是为了保证信息的 机密性.完整性.可用性.可控性.不可抵赖性. 以风险策略为基础. 12.1.1  信息安全的现状 ...

  4. 《Reids 设计与实现》第十二章 复制

    <Reids 设计与实现>第十二章 复制 文章目录 <Reids 设计与实现>第十二章 复制 一.简介 二.旧版复制功能的实现 1.同步 2.命令传播 三.旧版复制功能的缺陷 ...

  5. 第十二章: 部署Django

    2019独角兽企业重金招聘Python工程师标准>>> 第十二章: 部署Django 本章包含创建一个django程序最必不可少的步骤 在服务器上部署它 如果你一直跟着我们的例子做, ...

  6. 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理

    第十二章--SQLServer统计信息(3)--发现过期统计信息并处理 原文: 第十二章--SQLServer统计信息(3)--发现过期统计信息并处理 前言: 统计信息是关于谓词中的数据分布的主要信息 ...

  7. 高级shell编程笔记(第十二章 外部过滤器,程序和命令)

    第十二章 外部过滤器,程序和命令 标准的UNIX命令使得脚本更加灵活.通过简单的编程结构把shell指令和系统命令结合起来,这才是脚本能力的所在. 12.1 基本命令 新手必须掌握的初级命令 ls 基 ...

  8. python 宝典 笔记 第十二章 存储数据和对象 (各种对象转换成字符串)

    第十二章 存储数据和对象 12.1数据存储概述 12.1.1文本与二进制对比 文本格式易于阅读和调试,跨平台性能好.二进制格式占用空间小,适于按记录存取. 12.1.2压缩 假如对象的大小开始成为问题 ...

  9. 【信息系统项目管理师】第二十二章 信息系统安全管理(考点汇总篇)

    [信息系统项目管理师]第二十二章 信息系统安全管理(考点汇总篇) 考点分析与预测 信息安全为高级科目独有的章节,在第三版教材中有66页的内容.需要掌握的知识点非常多,且知识点非常散,在考试中上午一般考 ...

最新文章

  1. 不舍得卸载!推荐8个私藏APP,每一款都堪称精品
  2. SAP LSMW 导入Open PO时价格不对问题之对策
  3. 聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用
  4. hdu4081 最小树+DFS或者次小树的变形
  5. 利用银行家算法避免死锁(C++实现)
  6. GPU 编程入门到精通(三)之 第一个 GPU 程序
  7. 2017 php7 使用率,让PHP7达到最高性能的几个Tips
  8. 动态规划---实现输出最大公共子序列的长度以及输出最大子字符串(java语言描述)
  9. What code you will get when you create a wcf library
  10. PP视频如何播放本地视频文件
  11. Linux开机启动过程(6):页表的初始化、避开保留的内存、地址随机化
  12. 自建服务器调试,Mac简单实现服务器搭建(本地)与iOS调试
  13. 深圳一 AI 公司人脸数据泄露,超 256万 用户敏感信息在“裸奔”!
  14. 图神经网络概述(3):来自IEEE Fellow的GNN综述
  15. 拉普拉斯平滑Laplace Smoothing
  16. matlab程序产生OAM波,一种反射型极化转换超表面的轨道角动量产生结构设计的制作方法...
  17. JavaScript实现解析xml文件数据
  18. 创业成功第一步:写好商业计划书 第二章习题答案
  19. 终端发送自己的短地址给协调器
  20. 计算机水平毕业研究生7分落户,应届生们注意啦!只要72分就可以落户上海

热门文章

  1. vue使用lodop打印插件
  2. Educational Codeforces Round 110 (Rated for Div. 2)D Playoff Tournament
  3. 11次面试全通关 , 面试参考指南(Java 版)真的牛
  4. C#计算 求两个向量的夹角
  5. JVM II(Java虚拟机,Java Virtual Machine)
  6. 关于Unity3D开发三星Gear VR的初步尝试(一):已实现打包到手机显示
  7. XMind 8 Pro 专业版激活 XMind ZEN 思维导图
  8. [GXYCTF2019]gakki
  9. Git指令大全——基础入门(一)
  10. 科技图书翻译思想指南(上篇)