什么是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;
}
文章到这里就分享结束了,感谢各位的观看,希望大家点点赞,点点关注,谢谢大家!