首页 > 数据库 >修复 Sqlite "database disk image is malformed"

修复 Sqlite "database disk image is malformed"

时间:2023-06-15 10:47:53浏览次数:45  
标签:Sqlite .__ database self len path disk image

Sqlite 是用于移动设备的轻量级数据库。Android 编译遇到出错异常:

database disk image is malformed

 

处理方法为通过对 sqlite 提供的修复命令建立脚本封装自动处理。修复方法来自网络搜索,年代久远,出处不可考,如找到出处,本文引用改为链接。

 

 1 #1.dumpSQL语句
 2 def __dumpSql(self):
 3         cmd = "cd "+self.__path+"&"+self.__path[0:2]+"&"+'''\
 4         sqlite3.exe {oldFile}<dump.sql'''.format(oldFile = self.__oldFile)
 5         os.system(cmd)
 6 
 7 
 8 #这里的dump.sql里面就是
 9 #.output tmp.sql
10 #.dump
11 #.quit
12 
13 
14 #2.修改临时文件的最后一行
15 def __modLastLine(self):
16         with open(self.__tmpFilePath,"rb+") as f:
17             # 获取文件大小
18             fsize = os.path.getsize(self.__tmpFilePath)
19             # 设置初始偏移量
20             offset = -8
21         
22             while -1*offset <fsize:
23                 # 从后往前定位
24                 f.seek(offset ,os.SEEK_END)
25                 # 读取当前行记录
26                 lines = f.readlines()
27                 # 如果当前的行数已经大于等于2了,说明最后一行的所有字符已经包括读取完了
28                 if len(lines) >=2:
29                     # 获取最后一行的字符长度
30                     last_line_len = len(lines[-1])
31                     # 重新seek之后,用truncate()函数进行截取
32                     f.seek(-last_line_len,os.SEEK_END)
33                     f.truncate()
34                     # 在最后再加上Commit;
35                     f.write(b"Commit;")
36                     return
37                 else:
38                     offset*=2
39 
40 
41 #3.读取临时文件,并写新库
42 def __readSql(self):
43        cmd = "cd "+self.__path+"&"+self.__path[0:2]+"&"+'''\
44        sqlite3.exe {newFile}<read.sql'''.format(newFile = self.__newFile)
45        os.system(cmd)
46 
47 
48 #此处read.sql内容:
49 #.read tmp.sql
50 #.quit
51 
52 
53 #4.修复完成后删除临时文件
54 def __delTmp(self):
55        cmd = "cd "+self.__path+"&"+self.__path[0:2]+"&"+'''\
56        del {tmpFile}'''.format(tmpFile=self.__tmpFile)
57        os.system(cmd)

 

2023/6 整理

 

标签:Sqlite,.__,database,self,len,path,disk,image
From: https://www.cnblogs.com/grandma/p/17482234.html

相关文章

  • SQLite3中自增主键归零方法
    SQLite3中自增主键归零方法Sqlite3记录被清除之后,如果表中有自增长字段,下次再插入数据,会继续延续之前自增长字段的历史记录。即使在清空table后,如果table中有自增ID值,那么这个值是不会归零的,而且会继续呈现递增。当SQLite数据库中包含自增列时,会自动建立一个名为sqlite_sequenc......
  • 论文解读- nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segment
    本篇主要解读论文“nnU-Net:Self-adaptingFrameworkforU-Net-BasedMedicalImageSegmentation”==nnU-Net:基于U-Net的自适应医学图像分割框架。实现见本专栏下其他博文。直达链接......
  • Sqlite3简单介绍与一些常用的例子
    Sqlite3简单介绍与一些常用的例子1:常用接口 个人比较喜欢sqlite,使用最方便,唯一的准备工作是下载250K的源;而且作者很热心,有问必答。以下演示一下使用sqlite的步骤,先创建一个数据库,然后查询其中的内容。2个重要结构体和5个主要函数:sqlite3              *pdb,数......
  • java ImageIO处理图像的封装
    评:packagecom.adam.dev.pic.easyImage;importjava.awt.AlphaComposite;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.Point;importjava.awt.Rectangle;importjava.awt.co......
  • database/sql库
    database/sql是Go语言中一个标准库,用于处理关系型数据库的操作。它是一个轻量级的SQL数据库抽象,提供了一些基本的接口,包括连接、查询、事务等。database/sql使用SQL驱动程序的方式连接不同的数据库,让我们可以使用统一的API,而不用考虑底层数据库驱动的差异性。连接数据库......
  • Python内存数据库/引擎(sqlite memlite pydblite)
        1初探在平时的开发工作中,我们可能会有这样的需求:我们希望有一个内存数据库或者数据引擎,用比较Pythonic的方式进行数据库的操作(比如说插入和查询)。举个具体的例子,分别向数据库db中插入两条数据,”a=1,b=1″和“a=1,b=2”,然后想查询a=1的数据可能会使用这样的语句db......
  • Android带文字的ImageButton实现
    实际上,ImageButton是不能添加文字的,所以我选择将ImageView控件和TextView控件封装在一个LinearLayout里面,整个LinearLayout就是一个按钮,然后对它监听单击等动作。首先贴上layout.xml里面的布局设计: <LinearLayout02 android:layout_width="wrap_content"0......
  • Python批量导入Excel文件中的不重复数据到SQLite数据库
    自从2015年开始,为了上课方便,我编写了一个课堂管理系统并陆续增加了很多功能,已连续使用7个学期,在使用过程中也经常修补和完善其中一些细节。这个软件也是《Python可以这样学》最后一章的完整案例,涉及tkinter、数据库、多线程、Word文件操作、Excel文件操作、进程管理、二进制序列化......
  • image标签的SRC加上前缀
    <template> <viewclass="content"> <viewclass="itemtop"v-for="(item,index)intoplist"> <viewclass="oneitem_img"> <image:src="aaa(item.avator)"></image&......
  • Exadata存储节点image升级,patch_check_prereq阶段报错
    1、某客户有一台ExadataX4-2,当前的image版本为11.2.3.3.1,计划将image版本升级到18.1.34.0.0。当针对存储节点执行升级前的预升级检查工作时报错。具体如下所示:[root@dm01dbadm01patch_18.1.34.0.0.210717]#./patchmgr-cellscell_group-patch_check_prereq-rolling ......