当前位置: 首页 > news >正文

QT里使用sqlite的问题,好多坑

1. 我使用sqlite,开发机上好好的,测试机上却不行。后来发现是缺少驱动(Driver not loaded Driver not loaded),代码检查了又检查,发现应该是缺少dll文件(系统不提示,是自己使用 QMessageBox::warning(NULL, ("error"), database.lastError().text());后猜到的)。于是自己千方百计的想办法,反复测试,就是不行。结果悲剧的发现,原来是多次设置路径错误,浪费一上午时间。应该直接在可执行exe文件的同一目录下设置目录和文件如下即可:
my.exe\sqldrivers\qsqlite4.dll
既不要写成:
my.exe\plugins\sqldrivers\qsqlite4.dll
也不要写成
my.exe\sqldrivers\sqlite\qsqlite4.dll (因为QT自己的目录就是C:\Qt\4.8.6_2008\src\plugins\sqldrivers\sqlite)
另外,放在my.exe同一目录下也没有用。

2. 编程的时候,注意不能使用new QSqlDatabase();后调用addDatabase()函数。原因是什么我也不知道,反正结论在这里:
http://qt-project.org/doc/qt-4.8/qsqldatabase.html#open

3. 编程的时候注意,要填上QSQLITE,不是SQLITE
QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");

4. 使用QSqlDatabase::addDatabase函数的时候,如果是一个临时对象,那么要把它命名一下,比如(关键是第二个参数):
QSqlDatabase localdb = QSqlDatabase::addDatabase("QSQLITE", "Old_DB");
如果不写这第二个参数,那么就会把这个新连接当作默认连接,这样申请QSqlQuery对象但不写明数据库连接的话就会出错。

5. 使用 QSqlDatabase::removeDatabase的时候,必须把前面所有语句括号括起来,莫名其妙的一种用法。不过既然是官方文档这样说,就记住它,遵守它,相关链接在这里:
http://qt-project.org/doc/qt-4.8/qsqldatabase.html#removeDatabase

6. 还有一个文件qsqlited4.dll,不知道是干什么。

7. 可以很方便的使用VS编译C:\Qt\4.8.6_2008\src\plugins\sqldrivers\sqlite路径下的sqlite.pro工程文件,Release编译后得到一个dll,放在相关的路径里使用没有问题。

8. Process Explorer这个软件可以清楚地显示,当前开发exe文件依赖哪些DLL,很有帮助。这样就不用动脑筋了,观察结果即可。比如它我对这个项目提示依赖:

C:\Qt\4.8.6_2008\plugins\sqldrivers\qsqlite4.dll
但是注意,它提示的是开发机上的dll路径,客户机上的路径不一定是这样的。

但它的提示也只能作为一种参考,不能完全当真,它还提示我使用:
C:\Qt\4.8.6_2008\plugins\imageformats\qtiff4.dll
可是我根本就没有使用tiff文件。所以这个提示作为一种参考,找到自己需要的信息即可。

总结,QT发布版的坑真是多,怪不得QT公司不让免费用户静态编译和修改,大概是只让高手们用它来玩的。不知道静态编译是否可以避免这些问题。

---------------------------------------------------------------------------

几个有用连接:
http://qt-project.org/doc/qt-4.8/sql-driver.html
http://blog.sina.com.cn/s/blog_a6fb6cc90101gx30.html
http://blog.csdn.net/hustyangju/article/details/17799189
http://blog.chinaunix.net/uid-28394603-id-3775493.html (讨论回滚)

安装MySQL驱动:
http://blog.sina.com.cn/s/blog_74a7e56e01017s64.html

插件工作机制:
http://blog.csdn.net/dbzhang800/article/details/6543489
http://blog.csdn.net/csfreebird/article/details/17793161

SQLite学习手册
http://my.oschina.net/eechen/blog/84641
http://my.oschina.net/eechen/blog/84639
http://www.oschina.net/question/12_53183 (一个小时内学习 SQLite 数据库

http://www.lryc.cn/news/153626.html

相关文章:

  • openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍
  • Nginx安装与部署
  • Linux中Tomcat发布war包后无法正常访问非静态资源
  • 大数据、AI和云原生:引领未来软件开发的技术演进
  • Text-to-SQL小白入门(四)指令进化大模型WizardLM
  • 浅谈红队资产信息收集经验
  • list根据对象中某个字段属性去重Java流实现
  • 软件架构设计(三) B/S架构风格-层次架构(一)
  • 大端字节和小端字节
  • (10)(10.8) 固件下载
  • vue实现列表自动滚动效果
  • 如何通过构建遥感光谱反射信号与地表参数之间的关系模型来准确估算植被参数?植被参数光学遥感反演方法(Python)及遥感与生态模型数据同化算法
  • 持续集成与持续交付(CI/CD):探讨在云计算中实现快速软件交付的最佳实践
  • 【LeetCode题目详解】第九章 动态规划part02 62.不同路径 63. 不同路径 II day39补
  • 四维轻云助力在线管理、展示及分享多种地理空间数据
  • CMake 学习笔记
  • docker高级(DockerFile解析)
  • 抽象类实现接口的意义
  • 什么是接口测试,如何做接口测试?
  • Keil 编译 Debug
  • 【通用消息通知服务】0x3 - 发送我们第一条消息(Websocket)
  • Eclipse打jar包与JavaDOC文档的生成
  • 力扣:80. 删除有序数组中的重复项 II(Python3)
  • linux:需要注意docker和aws的rds的mysql默认是UTC而不是中国时区
  • 访问 GitHub 方法
  • 旅游APP外包开发注意事项
  • ROS机器人编程---------(二)ROS中的核心概念
  • Python学习教程:进程的调度
  • ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案
  • 基于Java+SpringBoot+Vue前后端分离农商对接系统设计和实现