论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
Mysql
›
【SQL】sqlite数据库损坏报错:database disk image is ...
【SQL】sqlite数据库损坏报错:database disk image is malformed(已解决 ...
星球的眼睛
金牌会员
|
2024-6-15 01:46:11
|
显示全部楼层
|
阅读模式
楼主
主题
691
|
帖子
691
|
积分
2073
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
目录
0.配景
1.数据库修复思路
2.具体修复步骤
1)在官网下载数据库工具sqlite3:
2)在损坏数据库的文件夹内,打开终端
3)用sqlite3打开受损的数据库,并用SQL语句的情势导出数据库中的数据和结构
4)新建一个数据库
5)将第三步生成的SQL语句文件【test.sql】导入新的数据库,生成新的结构和数据
6)改名
0.配景
医疗仪器,搭载linux系统,界面是用qt做的应用,用的是sqlite数据库,数据库名为【POCT_CUSTOM.db】,近期发生多次数据库报错损坏,也扣问了前辈该如何修复,成功修复后,特此整理总结,盼望帮助到其他碰到问题的小伙伴。
我的数据库出错,体如今客户端就是无法读出数据表现在桌面,应有的数据栏为空。
我用navicat工具分析时,错误总共分为以下三种情况
1)数据库中写入了不规则的非法数据,此时只要打开数据库,删撤除非法数据行即可正常读取;
2)数据库中的某个表(如PATIENT表)损坏,打开此表时会报错(如下图),我是通过新建一个数据库表(PATIENT表),然后将原表中的数据复制过来,然后删除原表(其实就是举行一个更换),即可正常读取;
3)另有一种就是数据库表都未损坏,可正常插入删除,但是客户端界面就是无法读取数据,通过扣问前辈,他们说大概是因为在数据库写入的过程中,仪器断电后大概会导致数据库表损坏,用的就是以下的方式修复好的(相当于拿到原有的数据库,然后重新生成一个数据库),详见下文
数据库损坏另有很多原因,具体可拜见官网:
How To Corrupt An SQLite Database File
1.数据库修复思路
1)使用工具【sqlite3】,打开需修复的数据库,用SQL语句的情势导出数据库中的数据和结构,将SQL语句生存到dump文件中,会输出一个.sql文件(如dump.sql)
2)手动创建一个数据库,如new.db
3)将dump.sql数据导入到新的数据库(new.db)中
4)改名,将新的数据库改名为原本项目中使用的数据库名(POCT_CUSTOM.db)
2.具体修复步骤
1)在官网下载数据库工具sqlite3:
SQLite Download Page
因为我的编译情况是windows,所以下的是windows-x64版本,找自己符合的就行
下载安装的过程我就不赘述了,可以参考以下博客:
SQLite的安装与命令行使用(1)-CSDN博客
2)在损坏数据库的文件夹内,打开终端
3)用sqlite3打开受损的数据库,并用SQL语句的情势导出数据库中的数据和结构
具体命令及寄义如下:
sqlite3 dbname //启动了一个 SQLite 数据库会话,并打开名为 dbname 的数据库文件。如果 dbname 文件不存在,SQLite 将会创建一个新的数据库文件。
>.mode insert //设置了输出模式为 insert,这意味着在执行 .dump 命令时,将以 SQL 插入语句的形式导出数据库中的数据。
>.output dbdump.sql //设置了输出文件为 dbdump.sql,也就是说,.dump 命令导出的 SQL 语句将会保存到 dbdump.sql 文件中。
>.dump //用于导出整个数据库的结构和数据。由于之前设置了输出模式为 insert,并指定了输出文件,因此数据库的内容将以 SQL 插入语句的形式保存到 dbdump.sql 文件中。
>.exit //退出 SQLite 数据库会话,关闭数据库连接
复制代码
使用时将【dbname】换成受损数据库的名字;【dbsump.sql】是输出的SQL语句文件
运行后,可以发现同级目录下出现了一个SQL语句文件,我的输出文件名为【test.sql】
打开【test.sql】看下内里的语句,主要是创建表、插入数据等
4)新建一个数据库
我就在刚才的目录下(受损数据库的目录)用命令行新建了一个【test.db】数据库
注意:要先用【sqlite3】目录进入sqlite3工具
sqlite> .open test.db
复制代码
运行后发现目录下多了一个文件
5)将第三步生成的SQL语句文件【test.sql】导入新的数据库,生成新的结构和数据
sqlite> .open test.db //打开test.db数据库(此时为空,0kb)
sqlite> .read test.sql //读取test.sql中的SQL语句信息,生成新的结构和数据
sqlite> .exit //退出
复制代码
6)改名
运行后,会发现数据库【test.db】从0kb变大了,具体大小与你原本的受损数据库有关,然后将【test.db】改名为你原本的数据库名字(我的数据库叫【POCT_CUSTOM.db】)即可更换使用
更换原本数据库后,发现界面的数据就能读出来了,顺利解决
PS.在此特殊鸣谢潘工~
--END--
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
星球的眼睛
金牌会员
这个人很懒什么都没写!
楼主热帖
体系集成项目招标要诀
Java项目:基于SSM框架实现的康健综合 ...
微调神器LLaMA-Factory官方保姆级教程 ...
防止邮箱发信泄露服务器IP教程 ...
CMake构建学习笔记11-minizip库的构建 ...
Ubuntu上安装Chrome浏览器
第三篇【传奇开心果系列】Python的自动 ...
xmind父主题快捷键Ctrl+Enter
若依——后端多表联查(实用于只查询) ...
G7易流赋能化工物流,实现安全、环保与 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
云原生
SQL-Server
网络安全
MES
DevOps与敏捷开发
快速回复
返回顶部
返回列表