sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?

news2024/12/24 9:24:42

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

我先打开了一个加密数据库test.db,然后将另外一个数据库文件abc.db附加到这个数据库中,abc.db的密码是123456,并且手工用数据库读取软件,并输入该密码后可以打开这个数据库文件,说明密码没有错。但我执行附加语句时,却返回26,返回值代表的意思是File opened that is not a database file,请问这是什么原因呢?代码如下:

sqlite3_open(D:\\test.db", &db);
sqlite3_key(db,123456, 6);
char chAttach[500];
sprintf_s(chAttach,500,"ATTACH DATABASE 'D:\\abc.db' AS 'db2' KEY '%s'","123456");
int nRet=sqlite3_exec(db, (const char*)chAttach, NULL, NULL, NULL);
if ( nRet!= SQLITE_OK) //调试发现这里nRet为26
{
    MessageBox(NULL,"Failure","",MB_OK);
}

如上问题有来自我自身项目开发,有的收集网站,有的来自读者,如有侵权,立马删除。

解决方案

  如下是上述问题的解决方案,仅供参考:


  SQLite返回错误代码26,表示“File opened that is not a database file”,这通常意味着SQLite无法识别您尝试附加的文件为有效的SQLite数据库文件。在您提供的情况下,有几个可能的原因:

  1. 文件路径问题:确保提供的文件路径'D:\\abc.db'是正确的,并且该文件确实存在于该路径。

  2. 文件损坏abc.db文件可能已损坏,无法被SQLite识别。尝试在SQLite数据库浏览器中打开该文件,看是否能正常访问。

  3. 密码错误:虽然您提到密码是正确的,但在执行ATTACH语句时,密码应该与数据库实际设置的密码匹配。请注意,SQLite的加密不是通过ATTACH语句中的KEY参数来指定的,而是在创建加密数据库时使用PRAGMA key设置的。确保您使用的密码与创建数据库时设置的密码一致。

  4. SQLite版本:确保您的SQLite库支持加密功能。较旧的SQLite版本可能不支持加密。

  5. 权限问题:检查您的应用程序是否有权限访问abc.db文件。

  6. 代码错误:在您的代码中,sqlite3_key函数调用可能存在问题。这个函数用于为数据库设置解密密钥,但它应该在ATTACH语句执行之前调用。此外,sqlite3_key调用应该在sqlite3_open之后立即进行,以确保在附加数据库之前已经解锁。

  7. 附加语句错误:在您的代码中,ATTACH语句的构建方式可能存在问题。请确保ATTACH语句的格式正确。

  8. 资源问题:如果您的应用程序已经打开了太多的文件句柄,可能无法打开更多的文件,这也可能导致错误。

  9. 错误处理:您的错误处理代码没有捕获到错误信息。您应该使用sqlite3_errmsg函数来获取错误消息,这有助于诊断问题。

以下是修改后的代码示例,它在附加数据库之前正确地设置了密钥:

sqlite3_open("D:\\test.db", &db);
// 设置密钥,注意这里的密钥应该是test.db的密钥
sqlite3_key(db, "test_key", 8);

// 附加另一个数据库,注意这里的密钥应该是abc.db的密钥
char chAttach[500];
sprintf_s(chAttach, 500, "ATTACH DATABASE 'D:\\abc.db' AS db2 KEY '123456'");
int nRet = sqlite3_exec(db, chAttach, NULL, NULL, NULL);
if (nRet != SQLITE_OK) {
    // 获取错误消息
    const char* errmsg = sqlite3_errmsg(db);
    MessageBox(NULL, errmsg, "Error", MB_OK);
}

  请确保test_keytest.db的解密密钥,而123456abc.db的解密密钥。如果问题仍然存在,请检查上述建议,并尝试使用SQLite数据库浏览器打开abc.db以验证其完整性。

  希望能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏「Bug调优」,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1627740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用JavaScript日历小部件和DHTMLX Gantt的应用场景(一)

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用…

DB索引B+树SQL优化

数据库的索引就像一本书的目录,查数据快人一步,快速定位,精准打击! 什么是数据库的索引? 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加…

实现瓦片地图摄像机追随以及玩家粘在地图上

目前是出现BUG但是摄像机可以加速减速追赶,并且玩家用了绝对游戏坐标,可以减去采样区绝对游戏坐标,得到参考于整个游戏地图里在采样区的位置坐标 相机追踪,有三个函数 bklocalplayer 是玩家在采样区里不出界,相机慢…

Docker深入探索:网络与资源控制、数据管理与容器互联以及镜像生成

目录 一、 Docker网络 (一)Docker网络实现原理 (二)Docker网络模式 1. Bridge网络(默认) 2. Host网络 3. None网络 4. Container网络 5. 自定义网络 二、资源控制 (一)cgr…

嵌入式开发一:初识Stm32

目录 一、嵌入式简介 1.1 嵌入式概念 1.2 嵌入式系统的组成 1.3 嵌入式的分类 1.3.1 嵌入式系统的分类 1.3.2 嵌入式处理器的分类 二、单片机简介(MCU嵌入式微控制器) 2.1 单片机是什么 2.2 单片机的作用是什么 2.3 单片机的发展历程 2.4 单片机发展趋势 2.5 复杂指…

Web APIs 学习归纳3---元素操作的补充

上一节也学习了一些有关元素操作的内容,主要集中在样式、属性、内容的修改。 一、元素操作的经典案例和思想 1.1 排他思想(排除他人、保留自己) 这个内容很重要,一般情况下如果有同一组元素,我们想要某一个元素实现某…

spring常用注解(五)lombok库

一、介绍: 1、简介: Lombok是一个作用于编辑器和构建工具的 Java 库,可以对编写的 Java 代码进行增强,比如说不用再写实体类的 getter 方法,equals 方法而是自动生成,自动生成日志输出变量等等&#xff0…

NXP i.MX8系列平台开发讲解 - 3.10 Linux PCIe资源分配与访问(二)

目录 1. PCIe BFD 2. PCIe 配置空间 2.1 PCIe 配置空间访问 PCIe I/O访问方法 PCIe MMIO访问方法 3. PCIe BAR相关 4. PCIe Capbility 5. PCIe 操作 本文将重点讲解PCIe的资源访问相关内容,对于PCIe资源访问是从Host 端老看可以对PCIe进行配置与访问的资源主…

微信小程序的常用API②

一、动画API (1)作用:用于在微信小程序中完成动画效果的制作 (2)使用:创建实例 wx.createAnimation() (3)常用属性: duration 【number型】 动画持续时间&…

TCN-LSTM时间卷积网络长短期记忆网络多输入多输出回归预测

文章目录 效果一览文章概述 订阅专栏只能获取一份代码部分源码参考资料 效果一览 文章概述 TCN-LSTM时间卷积网络长短期记忆网络多输入多输出回归预测 matlab2021 订阅专栏只能获取一份代码 部分源码 %------------------------------------------------------------------…

EureKa技术解析:科技行业的革新风暴(ai写作)

首先,这篇文章是基于笔尖AI写作进行文章创作的,喜欢的宝子,也可以去体验下,解放双手,上班直接摸鱼~ 按照惯例,先介绍下这款笔尖AI写作,宝子也可以直接下滑跳过看正文~ 笔尖Ai写作:…

目标检测——YOLOv6算法解读

论文:YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications (2022.9.7) 作者:Chuyi Li, Lulu Li, Hongliang Jiang, Kaiheng Weng, Yifei Geng, Liang Li, Zaidan Ke, Qingyuan Li, Meng Cheng, Weiqiang Nie, Yiduo Li, Bo …

SpringBoot---------整合Redis

目录 第一步:引入依赖 第二步:配置Redis信息 第三步:选择Spring Data Redis进行操作Redis数据库 ①操作String类型数据(用的少) ②操作Object类型数据(重要!!!&#x…

Linux 设置 ssh 服务开机自启并允许 root 账户以密码验证身份登录

确保openssh-server已安装。 确保防火墙已允许 ssh 端口上的传入连接。 修改 ssh 服务的 sshd_config 文件,以允许 root 账户以密码验证身份登录。 1、 从 sshd_config 中删除所有包含 “PermitRootLogin” 的行 sed -i "/^PermitRootLogin/d" /etc/s…

微信小程序关于主包大小不能超过1.5MB的问题

常规的解决办法有以下几种 1、把资源文件改成远程服务器的,比如png这些 2、进入如图的分析页面,能明确知道你哪个插件包太大,我这里之前echart的包就1mb,现在给他缩减到了500kb的样子 3、解决vant等npm包太大的问题&#xff0c…

【代码随想录刷题记录】LeetCode283移动零

题目地址 1. 思路 1.1 基本思路及假设 拿到这个题,首先想到,这是类似删除元素的方法,因为删除元素也是移动元素,但是移动的方向和删除元素的方法刚好相反,我们都知道,如果在数组中删除某个元素&#xff…

小程序使用阿里巴巴矢量图标库

一、登录官网 www.iconfont.cn 二、在搜索框中搜索想要的图标,将鼠标移动到图标上会看到三个标记 可以使用下载,直接使用: 可以使用css文件使用: 首先点击购物车样式的选项,而后点击下图位置: 点击自己创…

嵌入式Linux学习——Linux常用命令(上)

Linux命令行介绍 Linux Shell 简介 Shell 的意思是“外壳”,在 Linux 中它是一个程序,比如/bin/sh、/bin/bash 等。它负责接收用户的输入,根据用户的输入找到其他程序并运行。比如我们输入“ ls”并回车时, shell 程序找到“ ls…

Kafka 3.x.x 入门到精通(06)——Kafka进阶

Kafka 3.x.x 入门到精通(06)👉👉👉👉 Kafka进阶 3. Kafka进阶3.1 Controller选举3.2 Broker上线下线3.3 数据偏移量定位3.4 Topic删除3.5 日志清理和压缩3.7 页缓存3.8 零拷贝3.9 顺写日志3.10 Linux集群部…

循环购模式:电商消费增值的新引擎

大家好,我是微三云周丽! 在数业模式和创新的营销策字经济的浪潮下,电商行业以其独特的商略,不断刷新着消费者的购物体验。 近年来,循环购模式作为一种新兴的电商消费增值模式,逐渐在市场中崭露头角&#…