QSqlQuery 与 SQLite 数据库:准备 + bindValue 不更新表

Seb*_*tos 0 qt

我在使用 QSqlQuery 时遇到问题:它没有更新我的 SQLite 数据库。

我像这样初始化数据库(工作正常):

myDB = QSqlDatabase::addDatabase("QSQLITE");
myDB.setDatabaseName(QDir::homePath() + QDir::separator() + "file.db");
myDB.open();

if(!myDB.tables().contains("presets")) {
    myDB.exec("CREATE TABLE presets (id INTEGER PRIMARY KEY ASC, path TEXT);");
    for (int i=0; i<10; i++)
        myDB.exec("INSERT INTO presets (path) VALUES ('n/a')");
}
Run Code Online (Sandbox Code Playgroud)

我有一个 QString 值数组,我想更新到那里。

QString presets[10];
preset[0] = "foo";
preset[1] = "bar";
...
Run Code Online (Sandbox Code Playgroud)

我尝试使用这样的 for 循环更新数据库:

QSqlQuery qPreset(myDB);
qPreset.prepare("UPDATE presets SET path=':path' WHERE id=':id';");
for (int i=0; i<10; i++){
    qPreset.bindValue(":path", presets[i]);
    qPreset.bindValue(":id", i+1);
    qPreset.exec();
}
Run Code Online (Sandbox Code Playgroud)

但是数据库中没有任何反应,我也没有收到任何错误消息。任何想法为什么?

编辑:

这(虽然丑陋)工作得很好,所以它不是连接:

for (int i=0; i<10; i++)
    myDB.exec("UPDATE presets SET path='" + presets[i] + "' WHERE id='" + QString::number(i+1) + "';");
Run Code Online (Sandbox Code Playgroud)

Seb*_*tos 6

根据@Nejat 的问题,我找到了答案:我必须删除所有单引号。我没有注意到 QSqlQuery::bindValue() 负责所有必要的引用。

工作片段:

qPreset.prepare("UPDATE presets SET path=:path WHERE id=:id;");
Run Code Online (Sandbox Code Playgroud)

谢谢你的提示。