第十二章:Qt数据库(sqlite)
回顾:
第一章: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)相关推荐
- 【数据库原理及应用】经典题库附答案(14章全)——第十二章:数据库技术新发展
[数据库原理及应用]经典题库附答案(14章全)--第一章:数据库基础知识 [数据库原理及应用]经典题库附答案(14章全)--第二章:关系数据库知识 [数据库原理及应用]经典题库附答案(14章全)--第 ...
- 【正点原子Linux连载】第二十二章 AP3216C 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 3)全套实验源码+手册+视频下载地址: ...
- 系统架构师学习笔记_第十二章_连载
第十二章 系统安全架构设计 12.1 信息系统安全架构的简单描述 信息安全的特征 是为了保证信息的 机密性.完整性.可用性.可控性.不可抵赖性. 以风险策略为基础. 12.1.1 信息安全的现状 ...
- 《Reids 设计与实现》第十二章 复制
<Reids 设计与实现>第十二章 复制 文章目录 <Reids 设计与实现>第十二章 复制 一.简介 二.旧版复制功能的实现 1.同步 2.命令传播 三.旧版复制功能的缺陷 ...
- 第十二章: 部署Django
2019独角兽企业重金招聘Python工程师标准>>> 第十二章: 部署Django 本章包含创建一个django程序最必不可少的步骤 在服务器上部署它 如果你一直跟着我们的例子做, ...
- 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
第十二章--SQLServer统计信息(3)--发现过期统计信息并处理 原文: 第十二章--SQLServer统计信息(3)--发现过期统计信息并处理 前言: 统计信息是关于谓词中的数据分布的主要信息 ...
- 高级shell编程笔记(第十二章 外部过滤器,程序和命令)
第十二章 外部过滤器,程序和命令 标准的UNIX命令使得脚本更加灵活.通过简单的编程结构把shell指令和系统命令结合起来,这才是脚本能力的所在. 12.1 基本命令 新手必须掌握的初级命令 ls 基 ...
- python 宝典 笔记 第十二章 存储数据和对象 (各种对象转换成字符串)
第十二章 存储数据和对象 12.1数据存储概述 12.1.1文本与二进制对比 文本格式易于阅读和调试,跨平台性能好.二进制格式占用空间小,适于按记录存取. 12.1.2压缩 假如对象的大小开始成为问题 ...
- 【信息系统项目管理师】第二十二章 信息系统安全管理(考点汇总篇)
[信息系统项目管理师]第二十二章 信息系统安全管理(考点汇总篇) 考点分析与预测 信息安全为高级科目独有的章节,在第三版教材中有66页的内容.需要掌握的知识点非常多,且知识点非常散,在考试中上午一般考 ...
最新文章
- 不舍得卸载!推荐8个私藏APP,每一款都堪称精品
- SAP LSMW 导入Open PO时价格不对问题之对策
- 聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用
- hdu4081 最小树+DFS或者次小树的变形
- 利用银行家算法避免死锁(C++实现)
- GPU 编程入门到精通(三)之 第一个 GPU 程序
- 2017 php7 使用率,让PHP7达到最高性能的几个Tips
- 动态规划---实现输出最大公共子序列的长度以及输出最大子字符串(java语言描述)
- What code you will get when you create a wcf library
- PP视频如何播放本地视频文件
- Linux开机启动过程(6):页表的初始化、避开保留的内存、地址随机化
- 自建服务器调试,Mac简单实现服务器搭建(本地)与iOS调试
- 深圳一 AI 公司人脸数据泄露,超 256万 用户敏感信息在“裸奔”!
- 图神经网络概述(3):来自IEEE Fellow的GNN综述
- 拉普拉斯平滑Laplace Smoothing
- matlab程序产生OAM波,一种反射型极化转换超表面的轨道角动量产生结构设计的制作方法...
- JavaScript实现解析xml文件数据
- 创业成功第一步:写好商业计划书 第二章习题答案
- 终端发送自己的短地址给协调器
- 计算机水平毕业研究生7分落户,应届生们注意啦!只要72分就可以落户上海
热门文章
- vue使用lodop打印插件
- Educational Codeforces Round 110 (Rated for Div. 2)D Playoff Tournament
- 11次面试全通关 , 面试参考指南(Java 版)真的牛
- C#计算 求两个向量的夹角
- JVM II(Java虚拟机,Java Virtual Machine)
- 关于Unity3D开发三星Gear VR的初步尝试(一):已实现打包到手机显示
- XMind 8 Pro 专业版激活 XMind ZEN 思维导图
- [GXYCTF2019]gakki
- Git指令大全——基础入门(一)
- 科技图书翻译思想指南(上篇)