• QT连接sqlite数据库的错误及其修改办法


    今天在使用qt操作数据库。因为是第一次用,所以,遇到了一些坑,记录一下。
    系统:macOS
    语言:QT 5.12

    错误1:找不到驱动
    错误提示:QSqlError("", "Driver not loaded", "Driver not loaded")
    原因
    在写操作数据库的代码的时候,首先需要一个数据库连接,如下:
    QSqlDatabase::addDatabase("QSQLITE");
    此时,默认的数据库连接名字是"qt_sql_default_connection"。
    如果项目的配置不做调整的话,可执行程序是找不到数据库驱动的。
    解决办法
    打开qt项目的配置,在环境变量里加上驱动的路径配置。我这边的配置信息如下:
    QT_PLUGIN_PATH=/Users/huGuohua/Qt5.12.0/5.12.0/clang_64/plugins
    其中,上述目录的子目录sqldrivers里面就有各种数据库连接的驱动。

    问题2:无法打开数据库
    错误提示:QSqlQuery::exec: database not open
    原因
    在定义一个QSqlQuery变量的时候,需要有一个参数,这个参数就是用来指定对应的dml去使用哪个数据库连接的。如果定义的时候没有参数,程序也不提示错误,但是这个dml就孤零零地没有和数据库连接关联起来。也就出现了上面的错误。
    解决办法
    在定义dml的时候,需要马上和对应的数据库连接关联上。即如下:
    QSqlQuery sql_update(database);

    错误3:参数绑定的数量不匹配
    错误提示:QSqlError("", "Parameter count mismatch", "")
    原因
    以下是不会出错的流程,如果不按这个流程,都可能会导致上面的错误出现。
    正常的需要参数绑定的时候,代码的流程是:定义 QSqlQuery,然后最好clear()一下,接着用prepare()来处理对应的SQL。SQL中的参数的写法有两种:a)问号作为占位符:此时要使用addBindValue来将变量一个一个的绑定;b)冒号+名字作为占位符:此时要使用bindValue(":name",value)的方式来进行变量绑定;然后调用exec来执行。exec有很多写法,在参数绑定的时候,exec()中就不要写上SQL语句本身了,这个很关键。如果exec()中含有SQL语句的话,即使上面的流程再正确,参数绑定的再好,也是没有用的,exec就直接使用了参数中的SQL了。

  • 相关阅读:
    C# 多线程详解 Part.02(UI 线程和子线程的互动、ProgressBar 的异步调用)
    ubuntu 18.04安装ftp服务器
    ubuntu 18.04设置开机自动挂载移动硬盘
    使用apache commons net进行ftp传输
    Navicat连接MySQL 8出现2059
    Eclipse配置tomcat
    MySQL从.ibd文件中恢复数据
    MySQL建表时添加备注以及查看某一张表的备注信息
    在node.js中使用Set
    Java测试当前应用所占用的内存示例
  • 原文地址:https://www.cnblogs.com/babyha/p/14607286.html
Copyright © 2020-2023  润新知