Qt使用sqlite

sqlite

本文主要是讲解一下sqlite的基础使用,主要是应用在Qt上面

image-2025-05-27145349.png

SLQ语句

创建,打开数据库

sqlite3    *.db
image-20250527145903353

退出数据库

.quit 或 .exit

对数据库中表及内容操作的语句

QT数据库

要使用qt的sqlite数据库,需要在pro文件里面添加sql类

QT       += core gui sql

Qtsqlite数据库接口

QSqlDatabase建立数据库连接

QSqlDatabase 用于建立与数据库的连接,在建立连接时,加载数据库驱动的时候,可以设置数据库类型和数据库名字。除此以外,还可以通过接口设置数据库名字,主机名,用户名和密码

在.h文件中设置对象,一个数据库就对应一个对象

QSqlDatabase db;

在构造函数中初始化对象

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    db = QSqlDatabase::addDatabase("QSQLITE");//告诉系统连接的数据库时sqlite3数据库,连接成功,返回一个数据库对象
    db.setDatabaseName("test.db");//数据库文件后缀为.db

    //打开数据库
    if(!db.open())
    {
        qDebug() << "failed to open" << db.lastError();//数据库的专门的报错
    }
}

QSqlQuery执行各种SQL语句

访问数据库的操作主要包括:

  • 创建表
  • 向数据库表中插入数据
  • 删除数据
  • 更新数据
  • 查询数据
创建数据库

数据库中的表通常只需要创建一次,而其他操作是可以重复的

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    db = QSqlDatabase::addDatabase("QSQLITE");//告诉系统连接的数据库时sqlite3数据库,连接成功,返回一个数据库对象
    db.setDatabaseName("test.db");//数据库文件后缀为.db

    //打开数据库
    if(!db.open())
    {
        qDebug() << "failed to open" << db.lastError();//数据库的专门的报错
    }

    QSqlQuery query;//在创建该对象时系统会自动完成跟数据库的关联

    //定义一条创建表的sql语句,表名:staff 表中字段:id name age
    QString sqlCreate = QString("create table staff(id integer primary key autoincrement,"
                                "name varchar(20),"
                                "age int);");
    //执行命令语句
    query.exec(sqlCreate);
}

Widget::~Widget()
{
    delete ui;
}
插入
image-20250527194001659

values前面要有一个空格

//插入操作
    //注意里面的字符串要用单引号 
    QString sqlInsert = QString("insert into staff(name,age) values('张三',20);");
    if(!query.exec(sqlInsert))
    {
         qDebug() << "insert table fail" << db.lastError();
    }
查询
image-20250527194227000
QString sqlSelect = QString ("select * from staff;");
    if(!query.exec(sqlSelect))
    {
        qDebug() << "insert data error" << db.lastError();
    }
    else
    {
        while(query.next())//转到下一条
        {
            qDebug() << query.value("name").toString() << endl;
            qDebug() << query.value("age").toInt() << endl;
        }
    }

为什么需要调用 next()? 在 SQL 查询中,结果集可能包含多行数据。即使 COUNT(*) 只返回一行,也必须通过 next() 将指针移动到结果集的第一行才能读取数据。 如果不调用 next(),直接访问 value() 会出错。

删除
image-20250527200121221
//删除操作
    QString sqlDelete = QString("delete from staff where id = 2");
    if(!query.exec(sqlDelete))
    {
        qDebug() << "insert data error" << db.lastError();
    }
更新操作
image-20250527200201246
//更新操作
    QString sqlUpdate = QString("update staff set name = '李四' where id = 3");
    if(!query.exec(sqlUpdate))
    {
        qDebug() << "update data error" << db.lastError();
    }

QSqlQueryModel

功能:以只读访问查询数据库数据,并把数据库存放在一个结果集,数据不能修改,如果想要进行修改需要进行其他操作(重写虚函数)

//根据需求创建一个表
    QSqlQuery query;

    QString sqlCreateTable = QString("create table staff(id integer primary key autoincrement,"
                                     "name varchar(20),"
                                     "age int,"
                                     "address varchar(50),"
                                     "salary int);");
    query.exec(sqlCreateTable);

    QString sqlInsert = QString("insert into staff(name,age,address,salary)"
                                "values('张三',20,'四川',1000)");
    if(!query.exec(sqlInsert))
    {
        qDebug() << "Error insert into data" << db.lastError();
    }

    //使用QsqlQueryModel来高效的查询数据库操作
    //【1】创建QSqlqueryModel对象,设置相关表头信息
    QSqlQueryModel *model = new QSqlQueryModel;
    //执行sql语句,将查询出来的结果转换为model对象
    model->setQuery("select name,age,address,salary from staff");
    //根据需求设置表头信息
    model->setHeaderData(0,Qt::Horizontal,"Name");
    model->setHeaderData(1,Qt::Horizontal,"Age");
    model->setHeaderData(2,Qt::Horizontal,"Address");
    model->setHeaderData(3,Qt::Horizontal,"Salary");

    //给ui控件设置一个模型
    QTableView *view = new QTableView(this);
    view->setModel(model);
上一篇
下一篇