在QT里使用SQLite数据库

什么是SQLite数据库?SQLite是一种轻量级的数据库管理系统,它不需要一个独立的服务器进程,可以被集成到应用程序中。SQLite是开源的,支持跨平台操作,并且使用非常广泛。在QT里如何使用SQLite数据库呢?废话不多说,下面教大家如何使用。

1.在.pro配置文件里添加 QT += sql

2.开关数据库

#include <QSqlDatabase>    //头文件
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  //QSqlDatabase类主要用于打开和关闭数据库,不负责数据库的具体操作。增删改查它都不管。(加载sqlite驱动,使用不同的数据库加载不同的驱动即可,驱动都是qt提供好的。)

db.setHostName("testdb");//设置数据库的主机名称

db.setDatabaseName("testdb.db");//设置数据库名称,sqlite数据库以文件形式存在,所以这里是文件名

db.open();//打开数据库
db.close();//关闭数据库

3.数据库操作------创建表

对于数据库所有增删改查的操作,都使用QSqlQuery来实现。QSqlDatabase只负责加载驱动、打开关闭。

#include <QSqlQuery>    //和打开关闭数据库头文件不一样

QSqlQuery query;   //QSqlQuery类负责数据库的增删改查操作

//执行sql语句 create table user    //创建user表

示例:
query.exec("create table user("
"userid integer ,"
"password varchar(20),"
"nickname varchar(20),"
"headid integer);" );
其中userid,password,nickname,headid为字段,varchar为字符串类型,integer为整形。

4.数据库操作------插入数据

QSqlQuery query;
query.prepare("insert into user(password, nickname, headid) values(?,?,?)");

//exec只能执行固定的sql语句,如果语句中需要带一些参数,那么不能直接使用exec
//prepare可以设置一个带参数的sql语句,表示参数

//bindValue 是给prepare中sql的?绑定参数的 0代表第一个,1代表第二个,2代表第三个。

query.bindValue(0, e.password);
query.bindValue(1, e.nickname);
query.bindValue(2, e.headId);
query.exec();//执行绑定参数后的sql语句

5.数据库操作------查询数据

#include <QSqlRecord>
#include <QVariant>             //添加两个头文件
QSqlQuery query;
query.exec("select * from user");//查询所有的数据,查询成功后,所有的结果都在query对象中,以链表形式(假设)存储,所以我们要获得所有的数据需要遍历链表(链表是有空头的链表)

while(query.next())//query.next()移动到下一个节点,因为头是空的,所以第一次就跳过空头,返
回true表示有下一个节点,每个节点存放一行数据
{
        QSqlRecord record = query.record();//QSqlRecord中存放了一行的数据
        //QVariant是QT的泛型类,可以表示任何类型数据,也可以转换成任何类型数据
        QVariant userId = record.value("userid");//通过字段名获取值
        int userIdInt = userId.toInt();//将QVariant类型转换成整型
        QString name = query.record().value("nickname").toString();
        int headId = query.record().value("headid").toInt();
}

数据库查询------条件查询

QSqlQuery query;
query.prepare("select * from user where userid = ? and password = ?");
query.bindValue(0, e.id);
query.bindValue(1, e.password);
query.exec();
bool ok1 = query.exec();
if(query.next())
{
    //登录成功
    ok = true;
    e.nickName = query.record().value("nickname").toString();
    e.headId = query.record().value("headid").toInt();
}
else
{
    //登录失败
    ok = false;
}

文章到这里就分享结束了,感谢各位的观看,希望大家点点赞,点点关注,谢谢大家!

  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值