• 3809阅读
  • 1回复

测试一个数据库是否支持事务代码片段 [复制链接]

上一主题 下一主题
离线jorneyr
 

只看楼主 倒序阅读 楼主  发表于: 2009-07-24
QSqlDatabase db = DBUtil::getDatabase();
qDebug() << db.driver()->hasFeature(QSqlDriver::Transactions); // 查看数据库是否支持事务处理.
if (db.transaction()) {
    qDebug() << "Begin transaction";

    QSqlDatabase db1 = DBUtil::getDatabase();
    QSqlDatabase db2 = DBUtil::getDatabase();

    QString sql1("INSERT INTO a(id) VALUES(1)");
    QString sql2("INSERT INTO b(amount2) VALUES(30)"); // 数据库中实际字段为amount

    QSqlQuery query1(db1);
    QSqlQuery query2(db2);

    bool ok1 = true;
    bool ok2 = true;

    ok1 = query1.exec(sql1);
    ok2 = query2.exec(sql2);

    if (!ok1) {
        qDebug() << QString("Query1: %1").arg(query1.lastError().text());
    }

    if (!ok2) {
        qDebug() << QString("Query2: %1").arg(query2.lastError().text());
    }

    if (ok1 && ok2) {
        db.commit();
        qDebug() << "Commit";
    } else {
        db.rollback();
        qDebug() << "Rollback";
    }
}
离线jorneyr

只看该作者 1楼 发表于: 2009-07-24
QSqlDatabase DBUtil::getDatabase(bool *ok, QString *error) {
    QSqlDatabase db;

    if (!QSqlDatabase::contains(DBUtil::DATABASE_CONNECT_NAME)) {
        db = QSqlDatabase::addDatabase("QSQLITE", DBUtil::DATABASE_CONNECT_NAME);
        db.setDatabaseName(ConfigUtil::getInstance().getDatabasePath());
        //qDebug() << "与数据库建立连接";
    } else {
        db = QSqlDatabase::database(DBUtil::DATABASE_CONNECT_NAME, true);
    }

    if (!db.isOpen()) {
        bool result = db.open();

        if (0 != ok) {
            *ok = result;
        }
        if ((false == result) && (0 != error)) {
            *error = db.lastError().text();
        }
    }

    return db;
}

这是getDatabase片断.
快速回复
限100 字节
 
上一个 下一个