Qt保存blob字段的问题

Marcelxx 2017-04-11 06:34:11

//写进数据库
QFile file("E:\\test\\1.jpg");
if (!file.open(QIODevice::ReadWrite))
{
return -1;
}


QByteArray bytes = file.readAll();

QVariant variant(bytes);

QSqlQuery query(db);
query.prepare("insert into blob_test2(id,data) values(:id,:data)");
query.bindValue(":id", 4);
query.bindValue(":data", variant,QSql::Binary);

if (!query.exec())
{
strError = query.lastError().driverText().toLatin1();
error = db.lastError();
strError = error.text();
}


这种方法能成功,但是我遇到的需求是,文件较大,有几把M,不能再使用bindValue(),这种情况下该如何保存数据库。


...全文
1048 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dext 2017-04-12
  • 打赏
  • 举报
回复
我的代码能用 Qt5QuickDXd.dll 200M+,你自己看看。

    static QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("Q:/test.db");
    qDebug() << db.open();
    QSqlQuery q(db);
    qDebug() << q.exec("CREATE TABLE IF NOT EXISTS AAA (name TEXT, data BLOB);");
    q.clear();
    QFile f("Q:/qt580/qtbase/bin/Qt5QuickDXd.dll");
    f.open(QIODevice::ReadOnly);
    q.prepare("INSERT INTO AAA VALUES(?, ?);");
    q.addBindValue("sadfasdfasdf");
    q.addBindValue(f.readAll());
    qDebug() << q.exec();
    q.clear();
    db.close();
引用 2 楼 Marcelxx 的回复:
[quote=引用 1 楼 dext 的回复:] 为啥不能使用bindValue()? 你试了?
使用了bindValue,由于我需要保存的文件较大,有几百M,执行SQL的时候会崩溃。 另外,我想问问,Postgresql的OID怎么进行保存?[/quote]
Marcelxx 2017-04-12
  • 打赏
  • 举报
回复
引用 1 楼 dext 的回复:
为啥不能使用bindValue()? 你试了?
使用了bindValue,由于我需要保存的文件较大,有几百M,执行SQL的时候会崩溃。 另外,我想问问,Postgresql的OID怎么进行保存?
dext 2017-04-11
  • 打赏
  • 举报
回复
为啥不能使用bindValue()? 你试了?

21,489

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧