2016-09-03 2 views
0

私はsqliteの3.7を使用しています、Linuxの2.6.38、QT 4.8.4データベースにコミットしませsqliteのINSERTクエリがすぐ

次のように私のコード:

DataManager::DataManager(QObject *parent, const QString& path) : QObject(parent){ 

    this->db = QSqlDatabase::addDatabase("QSQLITE"); 
    this->db.setDatabaseName(path); 
    this->db.open(); 
    this->execute("PRAGMA foreign_keys=ON;"); 
    this->execute("PRAGMA synchronous=OFF;"); 
} 
void DataManager::execute(const QString& sql) throw(DataException){ 

    QSqlQuery query(db); 
    query.prepare(sql); 

    if(!query.exec()) THROWDATA("Could not execute \"" + sql + "\"(" + query.lastError().text()+")", query.lastError().number()); 

    qDebug() << "commit:" << query.isActive() << query.lastError(); 
    query.clear(); 
    qDebug() << "commit:" << query.isActive() << query.lastError(); 
} 

私は

this-> execute("Insert into table values('0' , 'Name'); 
を実行します

コードは約10秒後にすぐにデータベースにコミットされず、コードがコミットされます。

提案が必要です。あなたは余分なことを確認したい場合は、明示的に(通常はデフォルトです)同期モードを有効にすることができ

this->execute("PRAGMA synchronous=OFF;"); 

次の行を削除する必要が

+0

_ "コードは約10秒後すぐにデータベースにコミットしません。 " - どのように知っていますか?どのようにこれをチェックしていますか?開いている取引はありますか? –

答えて

0

this->execute("PRAGMA synchronous=NORMAL;"); 
+0

以前はそれは不在でしたが、まだ動作しませんでした。 – Amol

+0

私の更新された答えを見てください。また、取引を開始していますか? – redneb

+0

@reedneb申し訳ありませんが、まだ動作しませんでした。私は取引を開始していません。データベースに書き込んだ後、それを照会してチェックし、それが表示されたら、マシンの電源を切る。レコードはデータベースにコミットしません。私はOSのメモリに残っていると思う。 – Amol

関連する問題