zoukankan      html  css  js  c++  java
  • 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了。

  • 相关阅读:
    看美剧学英语 | Jeff Winger's speech in Community
    学习笔记 | Coursera
    学习笔记 | Coursera
    Python: How to reverse a list in python
    公司接口流程
    使用Supervisor管理Django应用进程
    orm中 如何模糊匹配某一年的用户和某一事时间段的用户
    Linux如何查看进程是否存活
    项目中有 xxxx 不能被json序列化
    关于项目经验
  • 原文地址:https://www.cnblogs.com/babyha/p/14607286.html
Copyright © 2011-2022 走看看