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()<<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

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值