Qt sqlite 数据库的使用

本文介绍了SQLite数据库的使用,包括其作为轻量级数据库的优点,如何在Qt环境中连接和创建SQLite数据库,以及执行基本的CRUD操作(创建、读取、更新和删除)示例。内容涵盖了开启事务以提高大数据量操作效率的方法,并提供了查询数据的示例。
摘要由CSDN通过智能技术生成

1.sqlite的优点

SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统。
Qt5以上版本可以直接使用SQLite。

2.sqlite的使用

修改.pro文件,添加sql

QT       += sql

添加头文件

#include "QSqlDatabase"
#include "QSqlQuery"
#include "QSqlError"
#include "QDebug"

void MainWindow::connect_sqlite()
{

    QSqlDatabase database;
    database = QSqlDatabase::addDatabase("QSQLITE");
    database.setDatabaseName("MyDataBase.db");	//设置数据库名

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

    //创建表
    QSqlQuery sql_query;
    //不存在则创建表
    if(!sql_query.exec("CREATE TABLE information(type varchar(20),time varchar(20),tick int(32),slot1 varchar(32),slot2 varchar(32),slot3 varchar(32),slot4 varchar(32),slot5 varchar(32),slot6 varchar(32),slot7 varchar(32),slot8 varchar(32),slot9 varchar(32),slot10 varchar(32),slot11 varchar(32),slot12 varchar(32) )")){
        qDebug() << "Error: Fail to create table."<< sql_query.lastError();
    }else{
        qDebug() << "Table created!";
    }
    if(!sql_query.exec("CREATE TABLE information8003(type varchar(20),time varchar(20),tick int(32),slot1 varchar(32),slot2 varchar(32),slot3 varchar(32),slot4 varchar(32),slot5 varchar(32),slot6 varchar(32),slot7 varchar(32),slot8 varchar(32),slot9 varchar(32),slot10 varchar(32),slot11 varchar(32),slot12 varchar(32) )")){
        qDebug() << "Error: Fail to create table."<< sql_query.lastError();
    }else{
        qDebug() << "Table created!";
    }
    if(!sql_query.exec("CREATE TABLE information8004(type varchar(20),time varchar(20),tick int(32),slot1 varchar(32),slot2 varchar(32),slot3 varchar(32),slot4 varchar(32),slot5 varchar(32),slot6 varchar(32),slot7 varchar(32),slot8 varchar(32),slot9 varchar(32),slot10 varchar(32),slot11 varchar(32),slot12 varchar(32))")){
        qDebug() << "Error: Fail to create table."<< sql_query.lastError();
    }else{
        qDebug() << "Table created!";
    }
}

向数据库插入数据

void SqlitLog::recLog()
{
	QSqlQuery query;
    if(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions))         //先判断该数据库是否支持事务操作
    {
        if(QSqlDatabase::database().transaction())                    //启动事务操作
        {
            //QString recMsg = QString("insert into information values(\"aaaa\",\"bbbb\",\"cccc\")"); 
			QString recMsg = QString("insert into information values('%1','%2','%3')")
            .arg("aaaa").arg("bbbb").arg("cccc");    
    		query.exec(recMsg);       //数据库执行SQL语句
            if(!QSqlDatabase::database().commit())
            {
                qDebug() << QSqlDatabase::database().lastError();     //提交失败的错误
                if(!QSqlDatabase::database().rollback())
                    qDebug() << QSqlDatabase::database().lastError(); //回滚失败的错误
            }
        }
    }
}
//当数据量小时,可以不要启动事务操作,可以直接执行query.exec(recMsg);
//当数据量大时,启动事务操作可以节省大量时间

删除数据
和添加数据类似,将添加语句改为删除语句即可,根据自己需求写入删除语句

QSqlQuery query;
QString recMsg = QString("delete from information where id = 1");    
query.exec(recMsg);

更新数据
和以上类似

QSqlQuery query;
QString recMsg = QString("update information set type = \"0x8004\" where id = 1");    
query.exec(recMsg);

查询语句

QSqlQuery query;
QString recMsg = QString("select * from information"); 
QSqlRecord record;  
QString drawData;
QStringList drawTimeList;
QStringList drawTickList; 
query.exec(recMsg);
    //循环获取模型中每一行的数据
    while(query.next()){
        record = query.record();
        //每一个slot的前面24位为输入/输出点的数据,然后选择相应的输入/输出点
        drawData.append(record.value(QString("slot%1").arg(slot + 1)).toString().at(id));       //选择对应IO板中对应IO点的数据
        drawTimeList.append(record.value("time").toString());           //获取数据中每一行的时间并插入链表
        drawTickList.append(record.value("tick").toString());           //获取数据中每一行的tick值并插入链表
    }

删除表

if(!sql_query.exec("drop table student"))
{
	qDebug() << sql_query.lastError();
}else{
	qDebug() << "table cleared";
}

关闭数据库

QSqlDatabase::database().close();
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值