在Qt中使用SQLite数据库
前言
SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统。
Qt5以上版本可以直接使用SQLite(Qt自带驱动)。
用法
1 准备
- 引入SQL模块
在Qt项目文件(.pro文件)中,加入SQL模块:
QT += sql
- 引用头文件
在需要使用SQL的类定义中,引用相关头文件。例如:
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
CPP 复制 全屏
2 使用
1. 建立数据库
检查连接、添加数据库驱动、设置数据库名称、数据库登录用户名、密码。
QSqlDatabase database;
if (QSqlDatabase::contains("qt_sql_default_connection"))
{
database = QSqlDatabase::database("qt_sql_default_connection");
}
else
{
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("MyDataBase.db");
database.setUserName("XingYeZhiXia");
database.setPassword("123456");
}
上述代码解释:
(1)第一行中,建立了一个QSqlDatabase对象,后续的操作要使用这个对象。
(2)if语句用来检查指定的连接(connection)是否存在。这里指定的连接名称(connection name)是qt_sql_default_connection,这是Qt默认连接名称。实际使用时,这个名称可以任意取。如果判断此连接已经存在,那么QSqlDatabase::contains()函数返回true。此时,进入第一个分支,QSqlDatabase::database()返回这个连接。
(3)如果这个连接不存在,则进入else分支,需要创建连接,并添加数据库。在else分支第一行,addDatabase()的参数QSQLITE是SQLite对应的驱动名,不能改。而且需要注意的是,addDatabase()的第二个参数被省略了,第二个参数的默认参数就是上面提到的Qt默认连接名称qt_sql_default_connection。如果需要使用自定义的连接名称(如果程序需要处理多个数据库文件的话就会这样),则应该加入第二个参数,例如
database = QSqlDatabase::addDatabase("QSQLITE", "my_sql_connection);
这个时候,如果在另一个地方需要判断my_sql_connection连接是否存在,就应该使用if (QSqlDatabase::contains("my_sql_connection"))。
(4)else分支第二行中,setDatabaseName()的参数是数据库文件名。如果这个数据库不存在,则会在后续操作时自动创建;如果已经存在,则后续的操作会在已有的数据库上进行。
(5)else分支后面两行,设置用户名和密码。用户名,密码都可以随便取,也可以省略。
2. 打开数据库
使用open()打开数据库,并判断是否成功。注意,在第一步检查连接是否存在时,如果连接存在,则在返回这个连接的时候,会默认将数据库打开。
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
// do something
}
如果打开成功,则进入else分支。对数据库的操作都需要在else分支中进行。
3. 关闭数据库
数据库操作完成后,最好关闭。
database.close();
4. 操作数据库
对数据库进行操作需要用到QSqlQuery类,操作前必须定义一个对象。下面举例说明操作方法。操作需要使用SQLite语句,本文中的几个例子会使用几个常用的语句,关于SQLite语句的具体信息请参考SQLite相关资料。
例1:创建表格
创建一个名为student的表格,表格包含三列,第一列是id,第二列是名字,第三列是年龄。
QSqlQuery sql_query;
QString create_sql = "create table student (id int primary key, name varchar(30), age int)";
sql_query.prepare(create_sql);
if(!sql_query.exec())
{
qDebug() << "Error: Fail to create table." << sql_query.lastError();
}
else
{
qDebug() << "Table created!";
}
代码解释:
(1)第一行定义一个QSqlQuery对象。
(2)第二行是一个QString,其中的内容是SQLite语句。对数据库的操作,都是用SQLite的语句完成的,把这些指令以QString类型,通过prepare函数,保存在QSqlQuery对象中。也可将指令,以QString形式直接写在exec()函数的参数中,例如:
sql_query.exec("create table student (id int primary key, name varchar(30), age int)");
创建表格语句:create table <table_name> (f1 type1, f2 type2,…);create table是创建表格的语句,也可用大写CREATE TABLE;student是表格的名称,可以任意取;括号中是表格的格式,上述指令表明,表格中有三列,第一列的名称(表头)是id,这一列储存的数据类型是int,第二列名称是name,数据类型是字符数组,最多有30个字符(和char(30)的区别在于,varchar的实际长度是变化的,而char的长度始终是给定的值),第三列的名称是age,数据类型是int。
如果sql_query.exec()执行成功,则创建表格成功。
例2:插入数据
在刚才创建的表格中,插入一行数据。
QString insert_sql = "insert into student values (?, ?, ?)";
sql_query.prepare(insert_sql);
sql_query.addBindValue(max_id+1);
sql_query.addBindValue("Wang");
sql_query.addBindValue(25);
if(!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << "inserted Wang!";
}
if(!sql_query.exec("INSERT INTO student VALUES(3, \"Li\", 23)"))
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << "inserted Li!";
}
插入语句:insert into <table_name> values (value1, value2,…);insert into是插入语句,student是表格名称,values()是要插入的数据。这里,我们插入了2组数据。插入第一组数据的时候,用addBindValue来替代语句中的?,替代的顺序与addBindValue调用的顺序相同。插入第二组数据的时候,则是直接写出完整语句。
例3:更新数据(修改数据)
QString update_sql = "update student set name = :name where id = :id";
sql_query.prepare(update_sql);
sql_query.bindValue(":name", "Qt");
sql_query.bindValue(":id", 1);
if(!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << "updated!";
}
语句:update <table_name> set <f1=value1>, <f2=value2>… where <expression>;
更新(修改)的语句是update...set...,其中student是表格名称,name是表头名称(即第二列),:name是待定的变量,where用于确定是哪一组数据,:id也是待定变量。bindValue(" ", " ")函数用来把语句中的待定变量换成确定值。
例4:查询数据
(1)查询部分数据
QString select_sql = "select id, name from student";
if(!sql_query.exec(select_sql))
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())
{
int id = sql_query.value(0).toInt();
QString name = sql_query.value(1).toString();
qDebug()<<QString("id:%1 name:%2").arg(id).arg(name);
}
}
语句select <f1>, <f2>, ... from <table_name>;
select是查询指令;<f1> 等等是要查询的变量(即表头),中间用逗号隔开;from ...指定表格。
上述语句是说查询student表中的 id 和 name 。执行查询之后,用sql_query.value(int)来获得数据。同样地,value(0)表示第一个数据,即 id,value(1)表示name。注意:value()函数的返回值类型是QVariant,因此要用toInt()等函数转换成特定的类型。
(2)查询全部数据
QString select_all_sql = "select * from student";
sql_query.prepare(select_all_sql);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())
{
int id = sql_query.value(0).toInt();
QString name = sql_query.value(1).toString();
int age = sql_query.value(2).toInt();
qDebug()<<QString("id:%1 name:%2 age:%3").arg(id).arg(name).arg(age);
}
}
语句select * from <table_name>;
查询所有数据用 * 表示。用while(sql_query.next())用来遍历所有行。同样用value()获得数据。
(3)查询最大id
QString select_max_sql = "select max(id) from student";
int max_id = 0;
sql_query.prepare(select_max_sql);
if(!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
while(sql_query.next())
{
max_id = sql_query.value(0).toInt();
qDebug() << QString("max id:%1").arg(max_id);
}
}
这个就是在语句中用max来获取最大值。
例5:删除与清空
(1)删除一条数据
QString delete_sql = "delete from student where id = ?";
sql_query.prepare(delete_sql);
sql_query.addBindValue(0);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
qDebug()<<"deleted!";
}
语句delete from <table_name> where <f1> = <value>
delete用于删除条目,用where给出限定条件。例如此处是删除 id = 0的条目。
(2)清空表格(删除所有)
QString clear_sql = "delete from student";
sql_query.prepare(clear_sql);
if(!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << "table cleared";
}
这里没有用where给出限制,就会删除所有内容。
https://www.hongxiu.com/booklist/1695176
https://www.hongxiu.com/booklist/1695175
https://www.hongxiu.com/booklist/1695174
https://www.hongxiu.com/booklist/1695173
https://www.hongxiu.com/booklist/1695172
https://www.hongxiu.com/booklist/1695171
https://www.hongxiu.com/booklist/1695170
https://www.hongxiu.com/booklist/1695169
https://www.hongxiu.com/booklist/1695168
https://www.hongxiu.com/booklist/1695167
https://www.hongxiu.com/booklist/1695166
https://www.hongxiu.com/booklist/1695165
https://www.hongxiu.com/booklist/1695164
https://www.hongxiu.com/booklist/1695163
https://www.hongxiu.com/booklist/1695162
https://www.hongxiu.com/booklist/1695161
https://www.hongxiu.com/booklist/1695160
https://www.hongxiu.com/booklist/1695159
https://www.hongxiu.com/booklist/1695158
https://www.hongxiu.com/booklist/1695157
https://www.hongxiu.com/booklist/1695156
https://www.hongxiu.com/booklist/1695155
https://www.hongxiu.com/booklist/1695154
https://www.hongxiu.com/booklist/1695153
https://www.hongxiu.com/booklist/1695152
https://www.hongxiu.com/booklist/1695151
https://www.hongxiu.com/booklist/1695150
https://www.hongxiu.com/booklist/1695149
https://www.hongxiu.com/booklist/1695148
https://www.hongxiu.com/booklist/1695147
https://www.hongxiu.com/booklist/1695146
https://www.hongxiu.com/booklist/1695145
https://www.hongxiu.com/booklist/1695144
https://www.hongxiu.com/booklist/1695143
https://www.hongxiu.com/booklist/1695142
https://www.hongxiu.com/booklist/1695141
https://www.hongxiu.com/booklist/1695140
https://www.hongxiu.com/booklist/1695139
https://www.hongxiu.com/booklist/1695138
https://www.hongxiu.com/booklist/1695137
https://www.hongxiu.com/booklist/1695136
https://www.hongxiu.com/booklist/1695135
https://www.hongxiu.com/booklist/1695134
https://www.hongxiu.com/booklist/1695133
https://www.hongxiu.com/booklist/1695131
https://www.hongxiu.com/booklist/1695132
https://www.hongxiu.com/booklist/1695130
https://www.hongxiu.com/booklist/1695129
https://www.hongxiu.com/booklist/1695128
https://www.hongxiu.com/booklist/1695127
https://www.hongxiu.com/booklist/1695126
https://www.hongxiu.com/booklist/1695125
https://www.hongxiu.com/booklist/1695124
https://www.hongxiu.com/booklist/1695123
https://www.hongxiu.com/booklist/1695122
https://www.hongxiu.com/booklist/1695121
https://www.hongxiu.com/booklist/1695120
https://www.hongxiu.com/booklist/1695118
https://www.hongxiu.com/booklist/1695119
https://www.hongxiu.com/booklist/1695117
https://www.hongxiu.com/booklist/1695116
https://www.hongxiu.com/booklist/1695115
https://www.hongxiu.com/booklist/1695114
https://www.hongxiu.com/booklist/1695113
https://www.hongxiu.com/booklist/1695112
https://www.hongxiu.com/booklist/1695111
https://www.hongxiu.com/booklist/1695109
https://www.hongxiu.com/booklist/1695110
https://www.hongxiu.com/booklist/1695108
https://www.hongxiu.com/booklist/1695107
https://www.hongxiu.com/booklist/1695106
https://www.hongxiu.com/booklist/1695105
https://www.hongxiu.com/booklist/1695104
https://www.hongxiu.com/booklist/1695103
https://www.hongxiu.com/booklist/1695102
https://www.hongxiu.com/booklist/1695101
https://www.hongxiu.com/booklist/1695100
https://www.hongxiu.com/booklist/1695099
https://www.hongxiu.com/booklist/1695098
https://www.hongxiu.com/booklist/1695097
https://www.hongxiu.com/booklist/1695096
https://www.hongxiu.com/booklist/1695095
https://www.hongxiu.com/booklist/1695094
https://www.hongxiu.com/booklist/1695093
https://www.hongxiu.com/booklist/1695092
https://www.hongxiu.com/booklist/1695091
https://www.hongxiu.com/booklist/1695090
https://www.hongxiu.com/booklist/1695089
https://www.hongxiu.com/booklist/1695088
https://www.hongxiu.com/booklist/1695087
https://www.hongxiu.com/booklist/1695086
https://www.hongxiu.com/booklist/1695085
https://www.hongxiu.com/booklist/1695084
https://www.hongxiu.com/booklist/1695083
https://www.hongxiu.com/booklist/1695082
https://www.hongxiu.com/booklist/1695081
https://www.hongxiu.com/booklist/1695080
https://www.hongxiu.com/booklist/1695079
https://www.hongxiu.com/booklist/1695078
https://www.hongxiu.com/booklist/1695077
https://www.hongxiu.com/booklist/1695076
https://www.hongxiu.com/booklist/1695075
https://www.hongxiu.com/booklist/1695074
https://www.hongxiu.com/booklist/1695073
https://www.hongxiu.com/booklist/1695072
https://www.hongxiu.com/booklist/1695071
https://www.hongxiu.com/booklist/1695070
https://www.hongxiu.com/booklist/1695069
https://www.hongxiu.com/booklist/1695068
https://www.hongxiu.com/booklist/1695067
https://www.hongxiu.com/booklist/1695066
https://www.hongxiu.com/booklist/1695064
https://www.hongxiu.com/booklist/1695065
https://www.hongxiu.com/booklist/1695063
https://www.hongxiu.com/booklist/1695062
https://www.hongxiu.com/booklist/1695061
https://www.hongxiu.com/booklist/1695060
https://www.hongxiu.com/booklist/1695059
https://www.hongxiu.com/booklist/1695058
https://www.hongxiu.com/booklist/1695057
https://www.hongxiu.com/booklist/1695056
https://www.hongxiu.com/booklist/1695055
https://www.hongxiu.com/booklist/1695054
https://www.hongxiu.com/booklist/1695053
https://www.hongxiu.com/booklist/1695052
https://www.hongxiu.com/booklist/1695051
https://www.hongxiu.com/booklist/1695050
https://www.hongxiu.com/booklist/1695049
https://www.hongxiu.com/booklist/1695047
https://www.hongxiu.com/booklist/1695048
https://www.hongxiu.com/booklist/1695046
https://www.hongxiu.com/booklist/1695045
https://www.hongxiu.com/booklist/1695044
https://www.hongxiu.com/booklist/1695043
https://www.hongxiu.com/booklist/1695042
https://www.hongxiu.com/booklist/1695041
https://www.hongxiu.com/booklist/1695040
https://www.hongxiu.com/booklist/1695039
https://www.hongxiu.com/booklist/1695038
https://www.hongxiu.com/booklist/1695037
https://www.hongxiu.com/booklist/1695036
https://www.hongxiu.com/booklist/1695035
https://www.hongxiu.com/booklist/1695034
https://www.hongxiu.com/booklist/1695033
https://www.hongxiu.com/booklist/1695032
https://www.hongxiu.com/booklist/1695031
https://www.hongxiu.com/booklist/1695030
https://www.hongxiu.com/booklist/1695029
https://www.hongxiu.com/booklist/1695028
https://www.hongxiu.com/booklist/1695027
https://www.hongxiu.com/booklist/1695026
https://www.hongxiu.com/booklist/1695025
https://www.hongxiu.com/booklist/1695024
https://www.hongxiu.com/booklist/1695023
https://www.hongxiu.com/booklist/1695022
https://www.hongxiu.com/booklist/1695021
https://www.hongxiu.com/booklist/1695019
https://www.hongxiu.com/booklist/1695020
https://www.hongxiu.com/booklist/1695018
https://www.hongxiu.com/booklist/1695016
https://www.hongxiu.com/booklist/1695017
https://www.hongxiu.com/booklist/1695015
https://www.hongxiu.com/booklist/1695014
https://www.hongxiu.com/booklist/1695013
https://www.hongxiu.com/booklist/1695012
https://www.hongxiu.com/booklist/1695011
https://www.hongxiu.com/booklist/1695010
https://www.hongxiu.com/booklist/1695009
https://www.hongxiu.com/booklist/1695007
https://www.hongxiu.com/booklist/1695008
https://www.hongxiu.com/booklist/1695006
https://www.hongxiu.com/booklist/1695004
https://www.hongxiu.com/booklist/1695005
https://www.hongxiu.com/booklist/1695003
https://www.hongxiu.com/booklist/1695002
https://www.hongxiu.com/booklist/1695001
https://www.hongxiu.com/booklist/1695000
https://www.hongxiu.com/booklist/1694999
https://www.hongxiu.com/booklist/1694998
https://www.hongxiu.com/booklist/1694997
https://www.hongxiu.com/booklist/1694993
https://www.hongxiu.com/booklist/1694994
https://www.hongxiu.com/booklist/1694996
https://www.hongxiu.com/booklist/1694995
https://www.hongxiu.com/booklist/1694992
https://www.hongxiu.com/booklist/1694991
https://www.hongxiu.com/booklist/1694990
https://www.hongxiu.com/booklist/1694989
https://www.hongxiu.com/booklist/1694987
https://www.hongxiu.com/booklist/1694988
https://www.hongxiu.com/booklist/1694986
https://www.hongxiu.com/booklist/1694985
https://www.hongxiu.com/booklist/1694984
https://www.hongxiu.com/booklist/1694983
https://www.hongxiu.com/booklist/1694982
https://www.hongxiu.com/booklist/1694981
https://www.hongxiu.com/booklist/1694980
https://www.hongxiu.com/booklist/1694979
https://www.hongxiu.com/booklist/1694978
https://www.hongxiu.com/booklist/1694977
https://www.hongxiu.com/booklist/1694976
https://www.hongxiu.com/booklist/1694975
https://www.hongxiu.com/booklist/1694974
https://www.hongxiu.com/booklist/1694972
https://www.hongxiu.com/booklist/1694973
https://www.hongxiu.com/booklist/1694971
https://www.hongxiu.com/booklist/1694970
https://www.hongxiu.com/booklist/1694969
https://www.hongxiu.com/booklist/1694968
https://www.hongxiu.com/booklist/1694967
https://www.hongxiu.com/booklist/1694966
https://www.hongxiu.com/booklist/1694965
https://www.hongxiu.com/booklist/1694964
https://www.hongxiu.com/booklist/1694963
https://www.hongxiu.com/booklist/1694962
https://www.hongxiu.com/booklist/1694961
https://www.hongxiu.com/booklist/1694960
https://www.hongxiu.com/booklist/1694957
https://www.hongxiu.com/booklist/1694959
https://www.hongxiu.com/booklist/1694958
https://www.hongxiu.com/booklist/1694956
https://www.hongxiu.com/booklist/1694955
https://www.hongxiu.com/booklist/1694954
https://www.hongxiu.com/booklist/1694952
https://www.hongxiu.com/booklist/1694953
https://www.hongxiu.com/booklist/1694951
https://www.hongxiu.com/booklist/1694950
https://www.hongxiu.com/booklist/1694949
https://www.hongxiu.com/booklist/1694948
https://www.hongxiu.com/booklist/1694947
https://www.hongxiu.com/booklist/1694946
https://www.hongxiu.com/booklist/1694945
https://www.hongxiu.com/booklist/1694944
https://www.hongxiu.com/booklist/1694943
https://www.hongxiu.com/booklist/1694942
https://www.hongxiu.com/booklist/1694941
https://www.hongxiu.com/booklist/1694940
https://www.hongxiu.com/booklist/1694939
https://www.hongxiu.com/booklist/1694938
https://www.hongxiu.com/booklist/1694937
https://www.hongxiu.com/booklist/1694936
https://www.hongxiu.com/booklist/1694935
https://www.hongxiu.com/booklist/1694934
https://www.hongxiu.com/booklist/1694933
https://www.hongxiu.com/booklist/1694932
https://www.hongxiu.com/booklist/1694931
https://www.hongxiu.com/booklist/1694930
https://www.hongxiu.com/booklist/1694929
https://www.hongxiu.com/booklist/1694928
https://www.hongxiu.com/booklist/1694927
https://www.hongxiu.com/booklist/1694926
https://www.hongxiu.com/booklist/1694925
https://www.hongxiu.com/booklist/1694924
https://www.hongxiu.com/booklist/1694923
https://www.hongxiu.com/booklist/1694922
https://www.hongxiu.com/booklist/1694921
https://www.hongxiu.com/booklist/1694920
https://www.hongxiu.com/booklist/1694919
https://www.hongxiu.com/booklist/1694918
https://www.hongxiu.com/booklist/1694917
https://www.hongxiu.com/booklist/1694916
https://www.hongxiu.com/booklist/1694915
https://www.hongxiu.com/booklist/1694914
https://www.hongxiu.com/booklist/1694913
https://www.hongxiu.com/booklist/1694912
https://www.hongxiu.com/booklist/1694911
https://www.hongxiu.com/booklist/1694910
https://www.hongxiu.com/booklist/1694909
https://www.hongxiu.com/booklist/1694908
https://www.hongxiu.com/booklist/1694907
https://www.hongxiu.com/booklist/1694906
https://www.hongxiu.com/booklist/1694905
https://www.hongxiu.com/booklist/1694904
https://www.hongxiu.com/booklist/1694903
https://www.hongxiu.com/booklist/1694902
https://www.hongxiu.com/booklist/1694901
https://www.hongxiu.com/booklist/1694900
https://www.hongxiu.com/booklist/1694899
https://www.hongxiu.com/booklist/1694898
https://www.hongxiu.com/booklist/1694897
https://www.hongxiu.com/booklist/1694896
https://www.hongxiu.com/booklist/1694895
https://www.hongxiu.com/booklist/1694893
https://www.hongxiu.com/booklist/1694894
https://www.hongxiu.com/booklist/1694892
https://www.hongxiu.com/booklist/1694891
https://www.hongxiu.com/booklist/1694889
https://www.hongxiu.com/booklist/1694890
https://www.hongxiu.com/booklist/1694888
https://www.hongxiu.com/booklist/1694887
https://www.hongxiu.com/booklist/1694886
https://www.hongxiu.com/booklist/1694885
https://www.hongxiu.com/booklist/1694884
https://www.hongxiu.com/booklist/1694883
https://www.hongxiu.com/booklist/1694882
https://www.hongxiu.com/booklist/1694881
https://www.hongxiu.com/booklist/1694880
https://www.hongxiu.com/booklist/1694879
https://www.hongxiu.com/booklist/1694878
https://www.hongxiu.com/booklist/1694877
https://www.hongxiu.com/booklist/1694876
https://www.hongxiu.com/booklist/1694875
https://www.hongxiu.com/booklist/1694874
https://www.hongxiu.com/booklist/1694873
https://www.hongxiu.com/booklist/1694872
https://www.hongxiu.com/booklist/1694871
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)