Qt模块化笔记之sql——数据库错误捕捉与处理

QSqlError类是今天的主角,查看

这个类在发生错误时,提供了错误的相关信息。包括驱动信息driverText(),数据库信息databaseText(),或者它们的综合(text()方法获取),也提供了 number()和type()函数,用于显示错语数量与类别

错语可以通过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()<
以上能成功运行,我们将主机名改成一个错误的,出现未知的主机

连接错误: "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

你可能感兴趣的:(Qt模块化笔记之sql)