在Qt中将QSqlRecord提交到MySQL数据库

时间:2009-11-05 16:42:58

标签: c++ sql mysql qt

我想访问一个MySQL数据库,我想在我的Qt / C ++程序中读取+写入数据到数据库。对于读写过程,我尝试使用QSqlTableModel,QSqlTableRcord和QSqlDatabase,因为这是一个非常愉快的方法,没有太多的SQL命令,我不喜欢这个或其他原因(处理自己)。 我有一个类似的方法已经运行(所以数据库已经运行)但它一直混乱。 所以简单的问题是我在这几行示例代码中做错了什么: 使用QT 4.5.x. 测试数据库有3列:float x,float y,blob img

int main(){
QImage img("./some_image.png");
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("test");
db.setPort(3306);
db.setUserName("root");
db.setPassword("xxxxxxx");
if (!db.open() )
    qDebug("Mising db / unable to open");
else {
    QSqlTableModel model;
    qDebug() << "tables::" <<db.tables(); //so I see the table exists and gets detected
    model.setTable("test_table");

    QSqlRecord rec;
    rec.setValue(0,1.0f);
    rec.setValue(1,2.0f);

    QByteArray ba;
    QBuffer buffer(&ba);
    buffer.open(QIODevice::WriteOnly);
    img.save(&buffer, "PNG");
    rec.setValue(2,ba);

    model.insertRecord(0,rec);
    qDebug() << model.lastError().text();
    if (!model.submitAll())
        qDebug() << "Submit all did not work";
    return 0;
    }

对于任何帮助,我已经从Qt文档的一端运行到另一端,但没有找到解决方案,我已经浪费了5个小时这样做,所以我感谢任何提示(除非你建议这样做完全不同的。)

2 个答案:

答案 0 :(得分:6)

您的QSqlRecord没有定义任何字段。你需要添加

rec.append(QSqlField("x", QVariant::Double));
rec.append(QSqlField("y", QVariant::Double));
rec.append(QSqlField("img", QVariant::Image));

之前设置值

答案 1 :(得分:0)

使用您的表格生成记录,qt会自动创建该表格包含的字段。

QSqlTableModel table;
table.setTable("test_table");
QSqlRecord rcd = table.record();
rcd.setValue("x",1.0f);
rcd.setValue("y",2.0f);

QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
img.save(&buffer, "PNG");
rcd.setValue("img",ba);

model.insertRecord(-1,rcd);