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

您所在的位置:网站首页 卡西欧9860giii数据导入后成功后任然找不到数据 Sqlite3创建表但找不到表(Qt+MinGW32)

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

2024-07-04 16:51| 来源: 网络整理| 查看: 265

Sqlite3创建表但找不到表(Qt+MinGW32) 现象解决方法附几张图总结补充

现象

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

解决方法

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

首先百度了db2是啥,未果。但后来发现当我把qt写的软件关了之后再次打开数据库的时候,上次新建的表回加载到我自己创建的数据库中,我就感觉这很迷惑很。找到了一篇博客提到打开数据库文件时将数据库路径写为相对路径之后可以解决问题,尝试,果然不产生了db2文件,且创建的表也被写入到了需要写入的数据库,基本满足需求。但是我想把数据库存在指定位置,我发现配置文件中我写的路径为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数据库也没那么多事儿了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3