温室里的小白 2021-08-25 09:58 采纳率: 66.7%
浏览 66
已结题

急需,,将txt文件导入到qt数据库中,我用的c++

就是将文本文件中的数据导入到qt数据库当中,在网上找了挺多的都说的不清楚,最主要是我是小白,有大神教一下嘛

  • 写回答

1条回答 默认 最新

  • bostonAlen 2021-08-25 10:13
    关注

    QT是可以对任何数据库操作的,而且连接和操作大同小异,基本上是sql语句和类型转化时的细微差别。
    以mysql为例子

    假设你的建表语句如下
    创建表
    包含id、文件名、文件内容

    CREATE TABLE filedata(
        id     INT     PRIMARY KEY AUTO_INCREMENT,
        filename    VARCHAR(255),
        data     MEDIUMBLOB
    );
    

    Qt连接mysql数据库

        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //添加数据库名称,这里写QMYSQL
        db.setHostName("127.0.0.1"); //设置数据库主机名
        db.setDatabaseName("test"); //设置数据库名
        db.setUserName("root"); //设置数据库用户名
        db.setPassword("1234"); //设置数据库密码
        if (!db.open()) {
            qDebug() << "Error: Failed to connect database." << db.lastError();
        } else {
            qDebug() << "Succeed to connect database.";
        }
    

    写入文件到Mysql
    一般都是把文件数据转化成QByteArray,然后insert到数据库

    void WriteDataToMysql()
    {
        //选择要写入的文件
        QString f = QFileDialog::getOpenFileName();
    
        //转换为字节数组
        QByteArray mapData;
        QFile file(f);
        file.open(QIODevice::ReadOnly);
        mapData = file.readAll();
        file.close();
    
        //插入数据
        QSqlQuery query;
        query.prepare("INSERT INTO filedata values(:id,:name,:data)");
        query.bindValue(":id", 1);
        query.bindValue(":name", "testName");
        query.bindValue(":data", mapData);
        if (!query.exec()) {
            qDebug() << query.lastError();
        } else {
            qDebug() << "inserted data successfully!";
        }
    }
    

    从Mysql读取文件到本地
    读取就是读出来,调用toByteArray。
    void Widget::readDataFromMysql()
    {

    QSqlQuery readquery;
    
    QByteArray databa;
    if (readquery.exec("select data from filedata where name = 'testName'")) {
        QSqlRecord myrecord = readquery.record();
    
        if (readquery.next()) {
            databa = readquery.value(myrecord.indexOf("data")).toByteArray(); //读取二进制对象
        }
    }
    QFile mybfile("b.mov");        //写到本地文件,存什么后缀文件名就写什么
    mybfile.open(QIODevice::WriteOnly);
    mybfile.write(databa);
    mybfile.close();
    qDebug() << "write data successfully!";
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月25日
  • 创建了问题 8月25日

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上