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重新编辑 ]

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐