(已解决)SQLite数据库学习笔记1:报错:The database disk image is malformed

问题现象:

今天在项目中用到了SQLite数据库,此前并未学习过,因此就简单的了解了一下,很快就遇到了第一个小问题,报错如下:

 


问题分析:

在组长的建议下,使用了DBeaver数据库管理和开发工具(因为图标是只河狸,所以我也会叫它河狸数据库工具);

由于没有接触过SQLite,组长也没有怎么介绍,就发了一个sample.db文件给我,我用DBeaver打开后,发现有一些奇怪的乱码:

虽然无法正常阅读,但还是有一些可读信息可以看出一些眉目,在大概浏览了一下这个带有乱码的文档后;作为程序员我们肯定会有一个很随手的习惯,那就是:时不时的按 "ctrl+s" ,然后就弹出窗口报错了:

从报错信息中可以得知: 这是因为DBeaver默认使用GBK格式的编码规则,但该文件在使用GBK编码时出现乱码,(也就是无法被GBK识别的字符),于是我就选择了第二个按钮"Save as UTF-8":

然后我再创建和配置完SQLite数据库连接之后:

打开表数据的时候却报错了:

The database disk image is malformed (database disk image is malformed )

从报错信息可以得知:

这是因为数据库磁盘映像格式不正确!

根据之前的操作,我们很快就能定位出问题所在:

是因为之前将文件保存为UTF-8编码规则才导致报错的.

于是就开始着手解决:

将文件改为GBK编码规则,再重新创建和配置数据库连接:

选择成Default(GBK):

结果还是同样的报错:

The database disk image is malformed (database disk image is malformed )

这是因为那些乱码是在拉入DBeaver时出现的,而你是转为UTF-8的格式去保存的,现在转成GBK格式,它又会出现乱码;但是请注意一个问题:当初拉入DBeaver的时候该文件的编码规则是GBK么?

仔细想想就知道:不是!

因为拉入DBeaver时已经有乱码,而DBeaver默认就是GBK解析规则,也就是说源文件在GBK解析之后是有乱码的;而且之前按"ctrl+s"的时候已经报错说不符合GBK格式了,而这时候我们选择将它保存为UTF-8格式,因为UTF-8能解析这些乱码,不过解析后也是人类无法正常识别但计算机能识别的奇怪字符;于是将导致了在不知道源文件的编码格式的情况下,将文件修改成了UTF-8的格式,由此看来UTF-8编码规则下的文件是无法被用于创建数据库连接的.


解决方法:

第一种:重新拷贝一份源文件,这也就是最快的方式,不做任何操作,直接创建在DBeaver中使用该源文件创建数据库连接即可:

第二种:在得知该源文件编码规则的前提下,可以尝试使用转编码工具修改其编码规则.