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

急需,,将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 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题