QSqlError类是今天的主角,查看
错语可以通过QSqlDatabase::lastError()、QSqlQuery::lastError()、模型的lastError()函数三种方式获取。
错语的类型有以下几种:
Constant | Value | Description |
---|---|---|
QSqlError::NoError | 0 | 无错语 |
QSqlError::ConnectionError | 1 | 连接错误 |
QSqlError::StatementError | 2 | 语句错语 |
QSqlError::TransactionError | 3 | 事务方面错误(可能不支持事务) |
QSqlError::UnknownError | 4 | 未知错误 |
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("qt-moduls-learning");
db.setUserName("root");
db.setPassword("");
if(db.open())
{
qDebug()<<"打开成功";
//更新数据
QSqlQuery query_update("update tb_books set price='20' where isbn='20131101183102' ");
query_update.exec();
}
QSqlError error;
error=db.lastError();
if(error.isValid())//发生错误时isValid()返回true
{
switch (error.type()) {
case QSqlError::NoError:
qDebug()<<"无错误";
break;
case QSqlError::ConnectionError://连接错语
qDebug()<<error.text();
break;
case QSqlError::StatementError://语句错语
qDebug()<<error.text();
break;
case QSqlError::TransactionError://事务错误
qDebug()<<error.text();
break;
default://未知错误
qDebug()<<error.text();
break;
}
}
以上能成功运行,我们将主机名改成一个错误的,出现未知的主机
连接错误: "Unknown MySQL server host 'ocalhost' (0) QMYSQL: Unable to connect"
用户名root改为其它的,我将它去掉了一个"o", 这里,打印出了如下错误,提示用户被拒绝访问。
连接错误: "Access denied for user ''@'localhost' to database 'qt-moduls-learning' QMYSQL: Unable to connect"
这些都是连接数据库里发生的,它们都属于:QSqlError::ConnectionError
如果,我们将执行的语句写错,如下
upd tb_books set price='20' where isbn='20131101183102'
这里,我们的db.lastError()并不能捕到这个错误,因为它属于语句的错误,因而可用QSqlQuery::lastError()
最终出现:
语句错误: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'upd tb_books set price='20' where isbn='20131101183102'' at line 1 QMYSQL: Unable to execute query"
相关源码在http://pan.baidu.com/s/1tHLbf