QT Sqlite数据库-教程03 插入数据-下
【1】手动提交事务
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlRecord>QSqlDatabase db;
db.transaction();
for(int i=0; i<100000; ++i){QSqlQuery cmd(QString("UPDATE %1 SET %2=%3 WHERE id==%4").arg(tableName ).arg(content).arg(str).arg(i));cmd.exec();
}
db.commit();
【2】事务的回滚
当数据插入失败后,可以执行事务的回滚操作,需要在commit之前进行回滚
db.rollback();
【3】锁的机制
1)锁的分类
一类是回滚日志锁,一类是WAL模式下的锁
2)锁状态主要有以下五种:
UNLOCKED:初始状态,表示没有锁。
SHARED:允许其他共享锁存在,但不允许排他锁。
RESERVED:表示事务已经开始,但尚未进行任何修改。
PENDING:表示正在等待获取排他锁。
EXCLUSIVE:表示事务正在进行写入操作,其他事务无法读取或写入。
3)状态转换
读:从UNLOCKED到SHARED,提交后回到UNLOCKED
写:从UNLOCKED到RESERVED,然后到EXCLUSIVE,提交后回到UNLOCKED或RESERVED