QT sqlite BLOB类型 写入数组

server/2024/10/18 18:14:35/

//本文在 QT6.2.4 MSVC2019调试成功。

//sqlite数据库的BLOB类型常常用来存数组,不同类型和长度的数组,需要转化为一个个字节。

//哪些数组呢,整型、浮点型、字符串都可以。图像的raw数据也是数组。

//那么QByteArray 正好可以。

//QByteArray可用于存储原始字节(包括‘\0’s)和传统的以8位‘\0’s结尾的字符串。使用QByteArray

//比使用const char *要方便得多。在幕后,它总是确保数据后面有一个“\0”终止符,并使用隐式共

//享(写时复制)来减少内存使用,避免不必要的数据复制。

//

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlDriver>
#include <QElapsedTimer>

static int func()
{// 初始化数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:"); // 使用内存数据库
    bool ok = db.open();
    if (!ok) {
        qDebug() << "无法打开数据库";
        return -1;
    }
    // 创建表格
    QSqlQuery query;
    ok = query.exec("CREATE TABLE binary_data (id INTEGER PRIMARY KEY, data BLOB)");
   
    if (!ok) {
        qDebug() << "创建表格失败";
        return -2;
    }
    // 插入二进制数据
   QByteArray binaryData /*= QByteArray::fromHex("1234")*/; // 示例二进制数据
    for(int i=0;i<16000;i++)//循环
   {
     binaryData.append(97);//逐个添加字符'a'的ascii码
   }
    QString str=QString("insert into binary_data"
                                 "("
                                  "data"
                                  ")"
                                  "values('%1')" )
                                 .arg(binaryData);//

// for (int i=0;i<10000;i++)//10000次耗时539ms
    ok = query.exec(str);//1次耗时2ms
    if (!ok)

   {
        qDebug() << "插入数据失败";
        return -3;
    }
    // 读取二进制数据
    ok = query.exec("SELECT data FROM binary_data WHERE id = 1");
    if (ok && query.next())

   {
        QByteArray retrievedData = query.value(0).toByteArray();
       // qDebug() << "读取到的二进制数据:" << retrievedData.toHex();
    } else

    {
        qDebug() << "读取数据失败";
        return -4;
    }
}
int main(int argc,char* argv[])
{
    QCoreApplication a(argc, argv);
    QElapsedTimer t;
    t.start();
    func();
    qDebug()<<t.elapsed()<<"ms";
    return a.exec();
}


http://www.ppmy.cn/server/7921.html

相关文章

HarmonyOS NEXT 使用Canvas实现模拟时钟案例

介绍 本示例介绍利用 Canvas 和定时器实现模拟时钟场景&#xff0c;该案例多用于用户需要显示自定义模拟时钟的场景。 效果图预览 使用说明 无需任何操作&#xff0c;进入本案例页面后&#xff0c;所见即模拟时钟的展示。 使用说明 无需任何操作&#xff0c;进入本案例页…

微服务之SpringCloud AlibabaNacos服务注册和配置中心

一、概述 1.1注册中心原理 在微服务远程调用的过程中&#xff0c;包括两个角色&#xff1a; 服务提供者&#xff1a;提供接口供其它微服务访问&#xff0c;比如item-service 服务消费者&#xff1a;调用其它微服务提供的接口&#xff0c;比如cart-service 在大型微服务项目…

【C++】类型转换

文章目录 一、种类1. static_cast2. reinterpret_cast3. const_cast4. dynamic_cast 二、RTTI 一、种类 1. static_cast static_cast用于相近类型的转换, 比如double, int, char… 不能用于不相关的类型转换. 类似于C语言中的隐式类型转换, 但是static_cast增强了可视性: i…

每日算法4/21

LCR 073. 爱吃香蕉的狒狒 题目 狒狒喜欢吃香蕉。这里有 N 堆香蕉&#xff0c;第 i 堆中有 piles[i] 根香蕉。警卫已经离开了&#xff0c;将在 H 小时后回来。 狒狒可以决定她吃香蕉的速度 K &#xff08;单位&#xff1a;根/小时&#xff09;。每个小时&#xff0c;她将会选…

http和https区别与上网过程

1.概念 HTTP和HTTPS是两种常用于Web浏览器和网站服务器之间信息传递的协议。HTTP在传输数据时使用的是明文&#xff0c;而HTTPS则是在HTTP的基础上增加了SSL/TLS加密层&#xff0c;提供了数据的加密传输。 HTTP&#xff08;超文本传输协议&#xff09;&#xff1a;是一个基于…

idea设置了maven会自动变回C盘那个

idea设置了maven会自动变回C盘那个 IDE支持Maven包装器&#xff0c;IDEA会将其用于项目&#xff0c;如果不想从包装器中使用Maven。 需要将项目中.mvn/wrapper/下的maven-wrapper.properties从项目中删除。

nacos 2022.0.0.0 版本实现负载均衡及集群

一、loadbalancer实现负载均衡 新版本的nacos已经取消了对ribbon的支持&#xff0c;所以不能使用ribbon来实现nacos提供的负载均衡。 但是新版本中我们可以使用loadbalancer实现负载均衡。 二、导入loadbalancer坐标 1、原本的坐标&#xff1a; 在parent的pom.xml中 <p…

Springboot的Test单元测试操作

Springboot的Test单元测试操作 简单总结需要操作的步骤 1&#xff0c;导入依赖 2&#xff0c;创建目录&#xff08;目录和启动类的目录保持一致&#xff09; 3&#xff0c;添加注解 4&#xff0c;写方法测试 1&#xff0c;导入依赖 <dependency><groupId>org.spri…