QT/C语言 实现数据库sqlite3
- 【1】引入数据库
- 【2】下载移植sqlite3
- 1.移植sqlite3
- 2.使用sqlite3
- 3.sqlite3中的数据类型
- 4.常用的SQL语句(全部都是分号结尾)
- (1)新建表格
- (2)往表格中插入数据
- (3)查询表格中的数据
- (4)删除表格中的数据
- (5)修改表格中的数据
- 【3】C语言调用sqlite3
- 1.接口函数介绍
- (1)新建/打开数据库文件
- (2)数据的操作--》执行SQL语句, 新建表格增删改查
- (3)关闭数据库
- 2.编译命令
- 【4】QT中数据库有关的类和方法
- 1.数据库有关的类
- 2.思路和步骤
- (1)安装数据库的驱动
- (2)设置数据库文件的名字
- (3)打开数据库
- (4)操作数据库--》增删改查
- (5)关闭数据库
- 3.其它的接口函数介绍
- (1)分析函数调用失败的原因
- 4.如何获取查询结果
- (1)获取查询结果
- (2)QVariant万能的数据类型
- 5.QT程序操作多个数据库文件,操作多个表格
【1】引入数据库
1.QT实现登录注册
文件IO,配合字符串的拆分,拼接
比如:新增修改密码功能(假如修改李四的密码)–》原来的做法非常不好写,需要定位李四的位置,然后替换掉李四原本的信息
张三@123456
李四@456789
数据库:用来存放数据的仓库,用文件来存放数据,数据最终是在电脑的硬盘上存储的
数据库提供了SQL语句辅助我们实现数据的增删改查基本操作,非常的方便
SQL:结构查询语句,数据库中专门用来操作数据的语句
数组,string,容器: 用来存放,用内存存放数据,程序退出,数据就没有了
文本文件:也可以存放数据,也是在硬盘上存储,但是操作不方便
2.核心知识点
常用的SQL语句
C语言调用sqlite3提供的接口函数实现数据库的操作
QT中的数据库操作
市面上主流的数据库软件
1.主流的数据库
甲骨文oracle --》Oracle Database
瑞典AB --》MySQL
IBM --》DB2
微软 --》SQL server
嵌入式开发 --》sqlite3 小型,开源的数据库软件
【2】下载移植sqlite3
https://www.sqlite.org/download.html //下载网址
1.移植sqlite3
命令行无法使用方向键,原因是移植的时候少了一个插件,解决方法提前下载安装插件,然后重新移植一遍就可以了
安装插件: sudo apt-get install libreadline-dev
第一步:把下载的源码包拷贝到你的家目录,然后解压
tar -zxf sqlite-autoconf-3360000.tar.gz
第二步:进入解压之后的文件夹,执行configure这个脚本会自动生成Makefile
./configure
第三步: 执行make命令,自动编译得到sqlite3
第四步:把编译好的sqlite3拷贝一份到/bin,方便你可以在任意位置直接执行sqlite3
2.使用sqlite3
1.新建数据库文件(后缀名默认是.db结尾)
sqlite3 xxx.db // xxx是你的数据库文件的名字
SQLite version 3.36.0 2021-06-18 18:36:39 //版本和发布时间
Enter ".help" for usage hints. //输入.help可以获取使用帮助
sqlite> //sqlite3的命令行终端
2.sqlite3的内置命令(sqlite3这个软件本身自带的命令,这些命令可以通过.help查看,全部都是小数点开头)
.quit 退出sqlite3
.exit 退出sqlite3
.tables 查看当前数据库文件中表格的名字
`注意:内置命令是不需要分号结尾的`
3.sqlite3中的数据类型
bit 表示二进制0或1
tinyint 8位的整数
smallint 16位的整数
int 32位的整数
float 小数
real 小数,类似于double
char[] 字符串
text 文本类型,字符串
4.常用的SQL语句(全部都是分号结尾)
(1)新建表格
create table 表的名字 (字段名1 修饰符,字段名2 修饰符…);
字段 姓名 年龄
比如:create table stutable(name char[10],age int);
create table if not exists 表的名字 (字段名1 修饰符,字段名2 修饰符........);
if not exists --》表格存在,就不创建
表格不存在,就新建
注意:同一个数据库文件中不能出现两个同名表格
create table if not exists 表的名字 (字段名1 修饰符 not null,字段名2 修饰符........);
not null表示字段1不允许传递空值
create table if not exists 表的名字 (字段名1 修饰符 not null,字段名2 修饰符 unique,........);
比如:create table stutable (name text,age int,id text unique); //限制id这个字段具有唯一性
unique表示字段2不允许有重复值
(2)往表格中插入数据
insert into 表的名字 values (字段1对应的值,字段2对应的值........);
比如:insert into stutable values("李四",19); //往stutable表格中插入了数据
(3)查询表格中的数据
select * from 表的名字; // *表示查看表格中所有的信息
select name from 表的名字; // 我只想查看name
select * from 表的名字 where 条件; //带条件的查询
比如:select * from stutable where age>=18; //查询age大于等于18
select * from stutable where age>=16 and age<=18; //多个条件 and 并且
select * from stutable where age>=16 or name="张三"; //多个条件 or 或者
select * from 表的名字 where name like "张%"; //like配合%模糊配置字符串
比如:select * from stutable where name like "张%";
select * from stutable where name like "%建国";
select * from stutable where name like "张%山";
select * from 表的名字 order by age desc; //按照age降序查询
select * from 表的名字 order by age asc; //按照age升序查询
(4)删除表格中的数据
delete from 表的名字 where 条件;
比如:delete from stutable where name="wangwu";
delete from stutable where name like "张%";
删除整个表格
drop table 表的名字;
(5)修改表格中的数据
update 表的名字 set 字段名=新的值 where 条件;
比如:update stutable set score=61 where name="lisi"; //把lisi的分数改成61分
update stutable set name="张散散",age=19 where name="张三"; //同时修改名字和年龄
【3】C语言调用sqlite3
C语言调用sqlite3提供的接口函数实现数据的操作
1.接口函数介绍
(1)新建/打开数据库文件
int sqlite3_open(const char *filename,sqlite3 ppDb);
返回值:成功 返回SQLITE_OK
失败 返回sqlite3.h的421行定义的某个错误码
参数:filename --》你要新建/打开的数据库文件名字
ppDb --》数据库的句柄
(2)数据的操作–》执行SQL语句, 新建表格增删改查
int sqlite3_exec(
sqlite3, //数据库的句柄
const char *sql, //你要执行的SQL语句
int (callback)(void,int col,charstr1,char*str2), //函数指针,-->如果你执行的是查询语句,就必须传递这个参数
参数: col --》表格列数
str1 --》你查询的结果
str2 --》存放表格的字段名
特点:select查询的结果有几个,callback指向的函数就会被调用几次
select查询没有结果(不是查询失败,仅仅只是查询没有结果而已),callback指向的函数不会被调用
void *, //传递给callback的第一个参数
char **errmsg //存放错误信息,执行SQL语句产生的错误信息
);
返回值:成功 返回SQLITE_OK
失败 返回sqlite3.h的421行定义的某个错误码
(3)关闭数据库
int sqlite3_close(sqlite3*);
2.编译命令
gcc *.c -o main -pthread -ldl
【4】QT中数据库有关的类和方法
注意:使用了数据库有关的类,必须添加sql这个库
1.数据库有关的类
QSqlDatabase --》用来表示数据库对象
QSqlQuery --》操作数据库,实现数据的增删改查
数据库的驱动(为了区分不同的数据库软件)
由于市面上的数据库软件特别多,QT也不知道你的电脑上究竟安装的是哪个数据库软件,所以QT针对市面上主流的数据库软件提供了对应的驱动,如果你电脑上使用了某个版本的数据库软件,你只需要安装对应的驱动即可(驱动名字在QT助手都有介绍)
2.思路和步骤
(1)安装数据库的驱动
[static] QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1String(defaultConnection))
返回值: 成功 返回QSqlDatabase对象
参数:type --》数据库的驱动名字
QDB2 --》IBM公司的数据库
QMYSQL --》MySql
QSQLITE --》sqlite3
connectionName --》数据库的连接名(如果你的程序操作了多个不同的数据库文件,需要用到这个参数)
(2)设置数据库文件的名字
void QSqlDatabase::setDatabaseName(const QString &name)
参数:name --》数据库的名字
(3)打开数据库
bool QSqlDatabase::open()
返回值: 成功 true 失败 false
(4)操作数据库–》增删改查
QSqlQuery::QSqlQuery(QSqlDatabase db)
参数: db --》数据库对象
bool QSqlQuery::exec(const QString &query)
返回值:成功 true 失败 false
参数:query --》你要执行的SQL语句
(5)关闭数据库
void QSqlDatabase::close()
3.其它的接口函数介绍
(1)分析函数调用失败的原因
QSqlError QSqlDatabase::lastError() const
返回值: QSqlError对象专门用来保存错误信息
QString QSqlError::text() const //返回字符串格式的错误信息,方便用户阅读
4.如何获取查询结果
(1)获取查询结果
bool QSqlQuery::next() //判断有没有查询结果,有 返回true,没有 返回false
while(myquery.next())
{
打印查询结果;
qDebug()<<myquery.value(0).toString(); //打印商品名称
qDebug()<<myquery.value(1).toDouble(); //打印商品价格
}
QVariant QSqlQuery::value(int index) const
返回值:QVariant是QT中万能的数据类型
参数: index --》字段的索引号,从0开始
比如:商品名称 --》索引号0
价格 --》索引号1
QVariant QSqlQuery::value(const QString &name) const
返回值:QVariant是QT中万能的数据类型
参数: name --》字段的名字
比如:商品名称 --》name
价格 --》price
(2)QVariant万能的数据类型
QVariant类型的对象---》可以转换成基本数据类型
QVariant类里面提供大量的toxxxx()方法进行转换
toString() toDouble() toInt()
基本数据类型 ---》可以转换成QVariant类型的对象
QVariant类里面提供大量的构造函数,可以把基本数据类型转换成QVariant类的对象
5.QT程序操作多个数据库文件,操作多个表格
操作多个表格: 只需要根据表格的名字区分即可
操作多个数据库文件:安装驱动的时候,必须传递第二个参数,用来区分不同的数据库文件