• 9262阅读
  • 3回复

QT数据库中的事务处理 [复制链接]

上一主题 下一主题
离线julieyzx
 

只看楼主 倒序阅读 楼主  发表于: 2007-09-03
QT数据库中的事务处理
— 本帖被 XChinux 执行加亮操作(2008-07-18) —
db->transaction();
    QSqlQuery query;
    query.exec("DROP TABLE track");
    query.exec("DROP TABLE cd");
    query.exec("DROP TABLE artist");
    query.exec("CREATE TABLE artist ("
               "id INTEGER PRIMARY KEY, "
               "name VARCHAR(40) NOT NULL, "
               "country VARCHAR(40))");
    query.exec("CREATE TABLE cd ("
               "id INTEGER PRIMARY KEY, "
               "artistid INTEGER NOT NULL, "
               "title VARCHAR(40) NOT NULL, "
               "year INTEGER NOT NULL)");
    query.exec("CREATE TABLE track ("
               "id INTEGER PRIMARY KEY, "
               "cdid INTEGER NOT NULL, "
               "numberr INTEGER NOT NULL, "
               "title VARCHAR(40) NOT NULL, "
               "duration INTEGER NOT NULL)");
    query.exec("INSERT INTO  artist "
               "VALUES (1001, 'Gluecifer', 'Norway')");

    query.exec("INSERT INTO cd "
               "VALUES (2001, 1000, 'Riding the Tiger', 1997)");
    
    query.exec("INSERT INTO track "
               "VALUES (3001, 2004, 01, 'Boris', 514)");

    QSqlError sqlError = query.lastError();
    if(sqlError.type()  == QSqlError::None)
        {
            db->commit();
        }
        else
        {
            db->rollback();
        }       
请问:假如我前面的Insert语句出现了语法错误,比如:query.exec("INSERT INTO cd "
               "VALUES (2001, 1000, 'Riding the Tiger', 1997)");但是sqlError.type()  == QSqlError::None是成立的,因为exec()执行时清空了错误信息,这样判断不能正确回滚,请问,QT3里面怎么处理这种情况的?异常机制是什么呢?在Java里面可以try catch,在QT里面怎么处理呢?谢谢!
[ 此贴被XChinux在2008-07-18 09:30重新编辑 ]
离线julieyzx

只看该作者 1楼 发表于: 2007-09-03
我现在用的是一条一条判断,太笨了,有没有更好的方法呢?请教各位啦,谢谢!
离线julieyzx

只看该作者 2楼 发表于: 2007-09-04
没人理我啊
离线XChinux

只看该作者 3楼 发表于: 2008-07-18
先得看看你所用的数据库在Qt中是否支持事务处理,方可判断是否可使用QSqlDatabase类里的transaction()及commit()、rollback()等方法,可用hasFeature()判断。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个