我遇到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')");
}
我有一个QString值数组,我想在那里更新。
QString presets[10];
preset[0] = "foo";
preset[1] = "bar";
...
我尝试用这样的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();
}
但是数据库中没有任何反应,我也没有收到任何错误消息。有什么想法吗?
编辑:
这个(虽然很难看)虽然工作得很好,但它不是连接:
for (int i=0; i<10; i++)
myDB.exec("UPDATE presets SET path='" + presets[i] + "' WHERE id='" + QString::number(i+1) + "';");
答案 0 :(得分:4)
基于来自@Nejat的问题,我找到了答案:我必须删除所有单引号。我没注意到QSqlQuery :: bindValue()会处理所有必要的引用。
工作片段:
qPreset.prepare("UPDATE presets SET path=:path WHERE id=:id;");
感谢您的提示。