Sqlite3创建表但找不到表(Qt+MinGW32)

博客作者在使用Qt和SQLite3创建数据库表时遇到数据未写入正确数据库的问题,表现为.db文件为空而.db2文件包含数据。通过调整数据库路径为双斜杠格式解决了该问题,但偶尔仍有数据写入错误的数据库。最终发现是数据库路径转换过程中产生的额外字节导致,修正转换方法后问题得到解决。
摘要由CSDN通过智能技术生成

Sqlite3创建表但找不到表(Qt+MinGW32)

现象

Qt中使用Sqlite3的函数创建数据库,建了一张表之后,插入数据,一切正常,函数返回成功,但是数据库文件大小为0kb,此时同路径下多了一个同名(但后缀为.db2)的文件,也就是说我自己创建的数据库文件为databse.db,但是下面多了个database.db2,使用可视化工具打开这两个文件,我自己创建的数据库里面啥都么有,但是自己生成的里面为我所插入的数据。这也就导致我的程序在读取数据库中内容时,找不到我想拿得数据。

解决方法

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 首先百度了db2是啥,未果。
  2. 但后来发现当我把qt写的软件关了之后再次打开数据库的时候,上次新建的表回加载到我自己创建的数据库中,我就感觉这很迷惑很。
  3. 找到了一篇博客提到打开数据库文件时将数据库路径写为相对路径之后可以解决问题,尝试,果然不产生了db2文件,且创建的表也被写入到了需要写入的数据库,基本满足需求。
  4. 但是我想把数据库存在指定位置,我发现配置文件中我写的路径为x:/A/B/test.db,这种格式,当我把他改成x://A//B/test.db后,神奇的事情发生了,成了。也就是说我在打开数据库传输的那个路径需要携程双斜杠(我用的Qt+MinGW32)。

附几张图

图片1: 数据库文件保存到了我所需要存的路径下
在这里插入图片描述

图片2:数据库中数据也正常
在这里插入图片描述
图片3:代码部分及路径写法
在这里插入图片描述
图片4:最初现象(db2文件产生)
在这里插入图片描述
图片5:甚至插入数据,关闭数据库后,数据仍在db2文件中,这就直接导致我下次打开软件打开默认的的.db数据库文件,读不到我想要的数据,因为数据不在这呀。
在这里插入图片描述

总结

目前我搜寻到的信息就一个使用静态路径,但不适合我,我也不清楚使用双斜杠这种方式合不合理,但是目标前解决了我的问题,所以记录一下。
至于到底是个什么原理,数据库做不做啥缓存什么的我也没仔细的学习过,希望高手指点。

补充

吐了,次日发现仍会偶然出现上面的情况,首先定位错误的产生大概率原因是数据库地址的问题,sqlite3_open()函数传入的数据库名参叔类型是char* ,我是从QString转QBytArray后再转过来的,于是排查将转换完成的char*打印强转QString打印,结果发现数据库名后面果真多了几个字节。
如图
在这里插入图片描述

我试了继续用这中方法打开数据库,多试了几次果真又出现了乱码的数据库。
如图
在这里插入图片描述
接着换种方式将QString类型的名称转成char*,先转成stdString,再建立char空数组,用strcpy拷贝,成了。
如图
在这里插入图片描述
到此为止暂时没发现异常,基本判定就是数据库的地址我传的不对,导致我有些时候打开的数据库并不是我想打开的那个,而是根据错误的地址新建了一个数据库,如果用QDatabase操作sqlite3数据库也没那么多事儿了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值