Qt 操作SQLite数据库

本文详细介绍如何使用Qt操作SQLite数据库,包括数据库的建立、打开、关闭,以及如何通过SQL语句进行表格的创建、数据的插入、修改、查询和删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qt 操作 SQLite数据库

关于QSLite

SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。可以集成在其他软件中,非常适合嵌入式系统。
Qt5及以上版本已集成QSLite。

准备

  1. 需要在.pro文件中加入语句
QT += sql
  1. 添加头文件
#include <QSqlError>
#include <QSqlDatabase>
#include <QSqlQuery>

代码地址:gitee

使用

需要用到#include <QSqlDatabase>头文件

建立数据库

设置数据库名称、数据库登录主机名、用户名、密码

    QSqlDatabase database;
    database = QSqlDatabase::addDatabase("QSQLITE");
    database.setDatabaseName("MyDataBase.db");  //数据库名
    //设置主机名、用户名、密码。可省略
    database.setHostName("acidalia");
    database.setUserName("zheng");
    database.setPassword("123456");

数据库登录主机名、用户名、密码可省略不写

打开数据库

    if (!database.open())
    {
        qDebug() << "Error: Failed to connect database." << database.lastError();
    }
    else
    {
        qDebug() << "Succeed to connect database." ;
    }

open()函数用于打开数据库,成功返回True,失败False
lastError()返回有关数据库上发生的最后一个错误的信息。

关闭数据库

    database.close();

操作数据库

需要用到#include <QSqlQuery>头文件

创建表格

创建一个名为student的表格,表格包含三列,第一列是id,第二列是名字,第三列是年龄。

    QSqlQuery sql_query;
    if(!sql_query.exec("create table student (id int primary key, name varchar(30), age int)"))
    {
        qDebug() << "Error: Fail to create table." << sql_query.lastError();
    }
    else
    {
        qDebug() << "Table created!";
    }

exec(const QString &query)
执行查询中的SQL。如果执行成功,则返回true并将查询状态设置为active;否则返回false。查询字符串必须使用与要查询的SQL数据库(例如,标准SQL)相应的语法。
调用exec()时,此查询的最后一个错误将被重置。
对于SQLite,查询字符串一次只能包含一个语句。如果给定多个语句,则函数返回false。

插入数据

  1. 方法一
    if(!sql_query.exec("INSERT into student values(1,\"zhangSan\",16)"))
    {
        qDebug() << "Error:insert fail 1." << sql_query.lastError();
    }
  1. 方法二
    sql_query.prepare("insert into student values(?,?,?)");
    int id_test = 2;
    sql_query.addBindValue(id_test);
    sql_query.addBindValue("xiaoMing");
    sql_query.addBindValue(15);
    if(!sql_query.exec())
    {
        qDebug() << "Error:insert fail 2." << sql_query.lastError();
    }

prepare()准备要执行的SQL查询查询。如果查询准备成功,则返回true;否则返回false。
addBindValue()prepare()一起用,三个addBindValue分别绑定prepare()中的第一、二、三个?

  1. 方法三
    sql_query.prepare("INSERT INTO student (id, name, age) "
                  "VALUES (:id, :name, :age)");
    sql_query.bindValue(":id", 3);
    sql_query.bindValue(":name", "Bart");
    sql_query.bindValue(":age", 18);
    if(!sql_query.exec())
    {
        qDebug() << "Error:insert fail 3" << sql_query.lastError();
    }

bindValue(" ", " ")函数用来把语句中的待定变量换成确定值。如:id,:name,:age

修改数据(更新数据)

  1. 方法一
    sql_query.exec("update student set name = \"QT\" where id = 1");
    if(!sql_query.exec())
    {
        qDebug() << sql_query.lastError();
    }
  1. 方法二
    sql_query.prepare("update student set name = :name where id = :id");
    sql_query.bindValue(":name","C++");
    sql_query.bindValue(":id",2);
    if(!sql_query.exec())
    {
        qDebug()<<"Error:update fail." << sql_query.lastError();
    }

查询数据

    sql_query.exec("select * from student");
    if(!sql_query.exec())
    {
        qDebug() <<"Error:selet fail"<<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("age").toInt();
            qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);
        }
    }

next检索结果中的下一条记录(如果可用),并将查询定位到检索到的记录上。请注意,结果必须处于活动状态,并且isSelect()必须在调用此函数之前返回true,否则它将不执行任何操作并返回false。
value(0)表示第一个数据,即id,value(1)表示name(也可用value("name")来表示name)。注意:value()函数的返回值类型是QVariant,因此要用toInt()等函数转换成特定的类型。

删除数据

  1. 删除单个数据
    sql_query.prepare("delete from student where id = ?");
    sql_query.addBindValue(1);
    //sql_query.exec("delete from student where id = 1");
    if(!sql_query.exec())
    {
        qDebug() << sql_query.lastError();
    }
  1. 清空表格里的所有数据
    if(!sql_query.exec("delete from student"))
    {
        qDebug() <<sql_query.lastError();
    }

删除表格

    if(!sql_query.exec("drop table student"))
    {
        qDebug()<<sql_query.lastError();
    }
    else {
        qDebug() << "table cleared";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值