sqlite数据库的安装、操作及在Qt中的使用
sqlite是比较轻量级的数据库,属于关系型数据库。
1、安装:
进入官网的download,根据自己所需的位数进行相关文件的下载,
注意:1)需要下载 ①dll类型文件,②tools工具文件;
2)将这两个压缩文件解压到一个文件夹下sqlite
2、使用:
1)通过命令行来使用 sqlite3.exe文件;
2)新建文本文档 → 修改后缀为.db → 将该.db文件拖到sqlite3.exe文件处,就会出现一个黑色的框 → 在该框中对sqlite数据库进行操作
3)在sqlite3.exe的文件的路径中,全选,然后输入cmd,回车,出现黑色的框,在该框中对sqlite数据库进行操作
3、数据库操作:
- 创建数据库: sqlite3 数据库名.db
- 查看所有表:.tables
【注】:执行创建数据库操作后,在路径中不会生成该数据库的.db文件,但是当执行查看表的操作后,该数据库.db文件则会被创建在路径中。只不过这个数据库是没有表格的。
- 创建表: create table 表名(字段1,字段2,...,字段n);
- 查询表中所有数据: select * from 表名;
- 表中插入数据:insert into 表名(字段1,字段2,...,字段n) values(数据1,数据2,...,数据n);
- 更新表中某些指定记录对应的数据:update 表名 set 字段2=新数据2 where 字段1="数据1";
【注】:update 表名 set 字段2=新数据2; 这个语句,是将该表中的所有的字段2的数据都更新为 新数据2。(例如:表为 user_infomation,字段2为 password,新数据2为 abc123,则执行该语句后,user_infomation表中的所有用户的password都为abc123)。执行更新操作,一定要注意是否需要添加筛选条件where。
- 删除表中某些指定记录对应的数据:delete from 表名 where 字段1='数据1';
【注】:清空某张表中所有记录:delete from 表名;
【重要提醒】:数据库操作之前最好备份!!!
关于sqlite数据库的常用操作见:https://blog.youkuaiyun.com/qq_43961980/article/details/104966345?spm=1001.2014.3001.5501
4、通过Qt使用sqlite:
1)使用前提:
① 引用sql类库:在pro工程文件引入sql(方法1:QT+=sql 方法2:在原来的基础上拼接,将 QT += core gui 改为 QT += core gui sql,每一个类库之间用空格隔开)
② 在.h文件(窗体头文件)中,添加头文件:
#include <QSqlDatabase> //连接数据库、创建数据库
2)使用方法:
① 在窗体头文件中,添加 QSqlDatabase db; 如下:
② 在窗体cpp文件中,添加数据库连接函数:通过 setDatabaseName 方法来创建数据库,通过 addDatabase 方法来创建需要连接的数据库类型
void Widget::connect_sqlite()//连接数据库函数
{
//连接数据库
this->db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("Dme.db");//设置一个数据库,创建一个数据库文件
//判断数据库是否打开成功
bool ok;
ok = db.open();
if(!ok)
{
qDebug()<<"数据库打开失败";
db.lastError();
}
else
{
qDebug()<<"数据库打开成功";
}
}
【注】:数据库的创建是在 build-文件夹 中。
③ 在窗体头文件中添加:
#include <QSqlQuery>//执行各种SQL语句的类
在窗体cpp文件中:通过QSqlQuery的exec方法来执行sql语句
//使用局部变量的形式声明
QSqlQuery query;
query.exec("create table user1(uname,upassword)");//创建表
query.exec("insert into table user1(uname,upassword) values('小明','123')");//插入数据
【重要提醒】:QSqlQuery类型的变量声明时,若想声明全局变量,则需要声明为指针类型。
→ 原因:如若未声明为指针类型的全局变量,则在连接并打开数据库后,用该变量去调用方法时,会出现找不到数据库(数据库未打开的情况),是因为全局变量声明响应后,数据库还未打开,因此该变量无法接受到数据库的连接。
//使用全局变量的形式声明
query = new QSqlQuery();
query->exec("create table user1(uname,upassword)");
【注】:使用指针时,不是用 . 而是用 ->
④ Qt操作的sqlite,如果数据库或表已经存在,则不会再次创建,而是打开。
因此在Qt中,操作数据库时,表的创建最好在命令行中进行,而表的增删改查则在Qt中进行。