• Файлообменник на qt5 c++ с ms sql?

    @rPman
    сохранить в бд через QSqlDatabase надо использовать QSqlQuery запрос
    открываем документацию и видим bindValue, позволяет добавлять параметры указанного типа ParamType - QSql::Binary

    Мне очень лень было искать или писать код поэтому попросил chatgpt, по сути он верный, может есть какие то нюансы или неточности, исправляются документацией
    spoiler
    #include <QSqlDatabase>
    #include <QSqlQuery>
    #include <QVariant>
    #include <QFile>
    #include <QByteArray>
    
    void writeBinaryData(const QString &filePath) {
        // Создаем объект базы данных
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName("my_database.db");
    
        // Открываем базу данных
        if (!db.open()) {
            qDebug() << "Не удалось открыть базу данных";
            return;
        }
    
        // Создаем объект QSqlQuery для выполнения запросов к базе данных
        QSqlQuery query;
    
        // Создаем таблицу, если она еще не существует
        query.exec("CREATE TABLE IF NOT EXISTS my_table (id INTEGER PRIMARY KEY, data BLOB)");
    
        // Открываем файл
        QFile file(filePath);
        if (!file.open(QIODevice::ReadOnly)) {
            qDebug() << "Не удалось открыть файл";
            return;
        }
    
        // Читаем все данные из файла
        QByteArray fileData = file.readAll();
    
        // Закрываем файл
        file.close();
    
        // Готовим запрос на вставку данных в таблицу
        query.prepare("INSERT INTO my_table (data) VALUES (:data)");
    
        // Привязываем двоичные данные к запросу
        query.bindValue(":data", fileData);
    
        // Выполняем запрос
        if (!query.exec()) {
            qDebug() << "Не удалось выполнить запрос";
            return;
        }
    
        qDebug() << "Данные успешно записаны в базу данных";
    }


    p.s. пожалуйста, не издевайтесь над сервером, пользователями, администраторами и здравым смыслом. Не храните файлы в базе данных! Только очень большая нужда может заставить так поступать, а уж если файлы имеют большой размер, то мало какое железо адекватно потянет такое 'решение'
    Ответ написан
    3 комментария