Qt5.12实战之Sqlite数据使用

该代码示例展示了如何使用Qt的QSql库进行SQLite数据库的基本操作,包括创建数据库,建立表,单条和批量插入数据,条件查询,增加表字段,更新记录以及删除特定行。

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

实现效果:

 

 完整演示代码:

#include <QCoreApplication>
#include <QtSql/QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include <QSqlQuery>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    //指定要使用的数据库是SQLITE
    QSqlDatabase sql = QSqlDatabase::addDatabase("QSQLITE");
    sql.setDatabaseName("sqlite.db");//创建数据库文件
    //打开数据库
    if(!sql.open()){
        qDebug()<<QStringLiteral("打开数据库失败:%1").arg(sql.lastError().text());
    }else{
        qDebug()<<QStringLiteral("打开数据库成功!");
        //执行SQL创建表
        QString tSql = "create table a("
                "id INTEGER PRIMARY KEY AUTOINCREMENT,"
                "name VARCHAR(40) NOT NULL,"
                "score INTEGER NOT NULL,"
                "class VARCHAR(40) NOT NULL)";
        QSqlQuery q;
        q.exec(tSql);//执行查询

        //插入数据
        //单条记录插入
        QString iSql="INSERT INTO a(name,score,class)"
                "VALUES('HACKERX',88,'CLASS ONE')";
        q.exec(iSql);

        //批量插入
        QStringList names;
        for(int i=0;i<100;i++){
            names<<QString("Name%1").arg(i+1);
        }
        QStringList classes;
        for(int i=0;i<100;i++){
            classes<<QString("Class%1").arg(i+1);
        }

        qDebug()<<names<<classes;
        //指定列绑定字段
        q.prepare("INSERT INTO a(name,score,class) VALUES(:name,:score,:class)");
        for(QString n:names){
            q.bindValue(":name",n);//绑定name字段
            q.bindValue(":score",(qrand()%101));//绑定score字段
            q.bindValue(":class",classes[qrand()%classes.length()]);//绑定class字段
            q.exec();//通过bindValue方式不用传入sql语句
        }
    }
    return a.exec();
}

增加sqlite的增,删,改,查

#include <QCoreApplication>
#include <QtSql/QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include <QSqlQuery>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    //指定要使用的数据库是SQLITE
    QSqlDatabase sql = QSqlDatabase::addDatabase("QSQLITE");
    sql.setDatabaseName("sqlite.db");//创建数据库文件
    //打开数据库
    if(!sql.open()){
        qDebug()<<QStringLiteral("打开数据库失败:%1").arg(sql.lastError().text());
    }else{
        qDebug()<<QStringLiteral("打开数据库成功!");
        //执行SQL创建表
        QString tSql = "create table a("
                "id INTEGER PRIMARY KEY AUTOINCREMENT,"
                "name VARCHAR(40) NOT NULL,"
                "score INTEGER NOT NULL,"
                "class VARCHAR(40) NOT NULL)";
        QSqlQuery q;
        q.exec(tSql);//执行查询

        //插入数据
        //单条记录插入
        QString iSql="INSERT INTO a(name,score,class)"
                "VALUES('HACKERX',88,'CLASS ONE')";
        q.exec(iSql);

        //批量插入
        QStringList names;
        for(int i=0;i<100;i++){
            names<<QString("Name%1").arg(i+1);
        }
        QStringList classes;
        for(int i=0;i<100;i++){
            classes<<QString("Class%1").arg(i+1);
        }

        qDebug()<<names<<classes;
        //指定列绑定字段
        q.prepare("INSERT INTO a(name,score,class) VALUES(:name,:score,:class)");
        for(QString n:names){
            q.bindValue(":name",n);//绑定name字段
            q.bindValue(":score",(qrand()%101));//绑定score字段
            q.bindValue(":class",classes[qrand()%classes.length()]);//绑定class字段
            q.exec();//通过bindValue方式不用传入sql语句
        }

        //查询带条件
        q.exec("select * from a where score > 85 and class GLOB '*5'");
        while (q.next()) {
            qDebug()<<QString("%1 %2 %3 %4 ")
                      .arg(q.value(0).toString())
                      .arg(q.value(1).toString())
                      .arg(q.value(2).toString())
                      .arg(q.value(3).toString());
        }

        //为表增加字段
        q.exec("alter table a add column field1 varchar(16)");
        //更新field字段值
        q.exec("update a set field1='hello'");

        //删除指定行
        q.exec("delete from a where id>30");

    }
    return a.exec();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自由软件开发者

有你的鼓励,我会更加努力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值