游标如何引用已删除的行?

2023-12-07

当我从 Android 中的 sqlite 数据库查询返回游标时,它似乎包含固定数量的行,无论数据库发生什么情况,这些行都不会改变。例如,如果在光标打开时删除了某些行,我仍然可以引用已删除的行。这很好,但是它是如何工作的呢?

一种猜测可能是 sqlite 知道我有一个光标指向该行,因此保留了旧数据的副本。但是,如果我有 100 万行,删除它们并用 100 万不同的行替换它们,似乎需要缓存大量数据!

UPDATE:

我现在认为我们在 Android 中看到的缓存并不是真正安全的,也不是 SQLite 的一部分。我创建了一个测试,它构建了一个包含 1,000,000 行的数据库,然后我查询数据库打印出一些结果并将游标保持打开状态,接下来我删除了一半的行,最后我尝试访问我保持打开状态的游标和结果是一个崩溃:

04-05 18:17:16.141 E/AndroidRuntime(19655): java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
04-05 18:17:16.141 E/AndroidRuntime(19655):     at android.database.CursorWindow.nativeGetLong(Native Method)
04-05 18:17:16.141 E/AndroidRuntime(19655):     at android.database.CursorWindow.getLong(CursorWindow.java:507)
04-05 18:17:16.141 E/AndroidRuntime(19655):     at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:75)
04-05 18:17:16.141 E/AndroidRuntime(19655):     at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:220)
04-05 18:17:16.141 E/AndroidRuntime(19655):     at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237)
04-05 18:17:16.141 E/AndroidRuntime(19655):     at com.jacob.DirectDbActivity$4.run(DirectDbActivity.java:88)

这似乎是 Android 中的一个错误,因为大多数数据库都很小,缓存窗口可以容纳所有结果,但在大型数据库中,这会打击你。


上次我检查过,游标是基于创建它的 SQL 的数据库快照。很像数据集。如果更改数据库,游标可能不知道它们的快照已旧。您可以对游标执行重新查询,以根据创建游标的原始 SQL 获取新数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

游标如何引用已删除的行? 的相关文章

  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • SQLite插入大量记录时出现问题

    我试图使用 SQLite3 shell 在某个表中插入 15530 条记录 但出现该错误 我搜索了解决方案 SQLITE MAX COMPOUND SELECT 默认为 500 是原因 但我不知道如何使用 Shell 更改它 错误 复合 S
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 发布android后更改应用内购买项目的价格

    在 Google Play 上发布后 是否可以更改应用内购买商品的价格 我假设该应用程序也已发布 完整的在线文档位于http developer android com http developer android com也http sup
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1

随机推荐

  • 用户控件或面板的自定义边框宽度和边框颜色

    我想在这里做同样的事情 Balazs Tihanyi https stackoverflow com a 9772020 8458887但使用 TableLayoutPanel 我测试了他的代码并且有效 但是当我更改 TableLayout
  • 鉴于存储私钥的新 FIPS 要求,是否有任何方法可以将代码签名证书放入 Azure Key Vault?

    我们订购了新的代码签名证书 并在基于 USB 的 硬件令牌 上获取了私钥 这与新的代码签名证书规则兼容 但这限制了对一台物理 PC 的访问 我们确实希望证书位于 Azure Key Vault 中 可从我们的构建代理 使用 azuresig
  • Tkinter focus_set 和 focus_force 未按预期工作

    我正在尝试拥有Entry打开新页面时获得焦点的字段 import tkinter as tk from tkinter import from tkinter import ttk class DIS tk Tk def init self
  • 如何临时模拟用户打开文件?

    我想暂时模拟域用户帐户以从 ASP NET 站点读取网络驱动器上的文件 我不想为整个站点设置模拟或在服务器上设置映射驱动器 我最终使用了代码Michiel van Otegem WindowsImpersonationContext 变得简
  • 状态栏问题

    正如您从我的图像中看到的 状态栏显示在我的表格视图的顶部 我不明白我做错了什么导致这种情况发生 我确信这将是一个简单的修复 但我只是想念它 任何帮助将不胜感激 谢谢 您可以通过在 ViewDidLoad 方法中编写以下代码来避免此问题 fl
  • 序列化/反序列化不同的属性名称?

    我有一个旧系统 在请求信息调用中返回 xml 其名称如下所示 邮政编码字段 名字字段 然后 同一系统有一个修改调用 它采用如下所示的 xml 邮政编码 名字 姓氏 有没有办法构建一个对象来反序列化请求 同时使用不同的名称序列化 xml 输出
  • 将 Linq-to-Sql 查询的 WHERE 子句作为参数传递

    这可能有点突破了 Linq to Sql 的界限 但考虑到到目前为止它的多功能性 我想我应该问一下 我有 3 个查询 它们选择相同的信息 仅在where子句 现在我知道我可以传递一个委托 但这只允许我过滤已经返回的结果 但我想通过参数构建查
  • $lookup 中其他连接条件的性能严重下降(使用管道)

    因此 在一些代码审查期间 我决定通过改进一个聚合来提高现有查询性能 如下所示 aggregate difference starts here lookup from sessions localField id foreignField
  • Android 10 中的 Android 开发者无 IMEI

    由于 Android 非常重视安全性 并试图让新的 Android 版本更加安全 因此开发人员很难跟上新的安全功能并找到旧方法的替代方案来使他们的应用程序与旧功能兼容 这个问题是关于新Android 10中的IMEI 旧方法通过使用以下代码
  • 创建在 Rust 中实现特征的对象向量

    用Java来说 我试图创建一个对象 严格实例 的集合 向量 每个对象都实现一个接口 特征 因此我可以迭代该集合并对所有对象调用一个方法 我已将其缩减为下面的一个示例文件 其中包含我希望能够更轻松地获得答案的所有部分 main rs try
  • 如何通过API检索Google Doc上文档的所有建议接受内容

    正如标题 我设法通过 API 检索 Google Docs 上所有建议接受的内容 我已经提到过它的指导方针 and 几个帖子但在这个平台上却是徒劳的 下面是我目前拥有的片段 请指教 function myFunction var docum
  • 使用 scipy.interpolate 进行样条表示:低振幅、快速振荡函数的插值效果较差

    我需要 以数字方式 计算我尝试使用两者的函数的一阶和二阶导数splrep and UnivariateSpline创建样条曲线以对函数进行插值以获取导数 然而 对于大小为 10 1 或更低的函数 样条表示本身似乎存在固有问题and正在 快速
  • 当使用 WinSCP 选择要上传到 FTP 服务器的文件的掩码与文件不匹配时,SSIS 任务失败

    我正在创建一个 SSIS 包 它使用脚本任务 通过 WinSCP 将文件上传到 FTP 上传工作正常 但是如果没有上传文件 我需要该过程失败 目前它只是循环并成功通过 在 WinSCP 命令文件中编写脚本方面还没有获得任何帮助 option
  • 如何在selenium中查找具有多个类的元素

    我有一个包含 3 个类的元素 我需要用 selenium 找到它
  • 文本转语音(TTS)-Android

    我是android平台的新手 现在我正在努力TTS Text to Speech 如果我在文本区域中输入文本 并且希望在单击 发言 按钮时将其转换为语音 谁能帮我吗 文本转语音功能内置于 Android 1 6 中 这是一个如何执行此操作的
  • 如何获取 TextView 的精确位置(以像素为单位)?

    我有一部 2560 x 1440 像素的智能手机 现在我正在使用这个功能TextView int locationOnScreen new int 2 txtAp GetLocationInWindow locationOnScreen 它
  • 为具有圆角的 UIImageView 创建阴影?

    我正在尝试创建一个ImageView它有圆角和阴影以赋予它一些深度 我能够为UIImageView 但是每当我添加代码以使其具有圆角时 它只有圆角而没有阴影 我有一个IBOutlet named myImage 并且它位于viewDidLo
  • pandas 中的单列

    有没有办法在不影响数据框其余部分的情况下对 pandas 中的单个列进行舍入 gt gt gt print df item value1 value2 0 a 1 12 1 3 1 a 1 50 2 5 2 a 0 10 0 0 3 b 3
  • 在哪里以及如何定义应用程序属性? - JHIpster

    在 Spring Boot 中 可以在 application properties 文件中定义应用程序属性 例如 Rest 的前缀可以定义为 spring data rest basePath api 对于基于 Spring Boot 的
  • 游标如何引用已删除的行?

    当我从 Android 中的 sqlite 数据库查询返回游标时 它似乎包含固定数量的行 无论数据库发生什么情况 这些行都不会改变 例如 如果在光标打开时删除了某些行 我仍然可以引用已删除的行 这很好 但是它是如何工作的呢 一种猜测可能是