Android SQLite - 为什么我的数据库每次都重新创建?

2023-12-24

我试图更好地理解 SQLiteOpenHelper 类以及 onCreate 和 onUpgrade 的调用方式和时间。

我的问题是,每次我退出并启动我的应用程序(从技术上讲,实际上是每次我创建 MyDB 的新实例时),都会调用 onCreate ,并且之前使用的所有数据都会被有效擦除...... WTF ???

我最初通过创建一个单例 MyDBFactory 来解决这个问题,在其中创建了 MyDB 的单个实例。这使得数据至少在应用程序运行时保持不变。

我希望我的数据库模式和数据能够持久!

我基本上有:

   public class MyDB extends SQLiteOpenHelper{
      private static int VERSION = 1;
      ...
      public ContactControlDB(Context context) {
        super(context, null, null, VERSION);
      }

@Override
public void onCreate(SQLiteDatabase db) {
    try {
        db.execSQL(DATABASE_CREATE);
        db.execSQL(INSERT_DATA);
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
}

and:

public class MyDBFactory{

private static MyDB db;

public static MyDB getInstance(Context context) {
    if(db == null) {
        db = new MyDB (context);
    }
    return db;
}

}

我想知道的是为什么每次我有“new MyDB(context)”时都会调用 onCreate,以及每次我的应用程序退出时我的数据库会去哪里。

如果您有一些适当的链接或一些可以帮助我了解的知识,我将不胜感激!


该行:

super(context, null, null, VERSION);

第二个参数是null指定应在内存中创建数据库,您应该给它一个名称。

安卓参考 http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#SQLiteOpenHelper%28android.content.Context,%20java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory,%20int%29

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

Android SQLite - 为什么我的数据库每次都重新创建? 的相关文章

  • 如何从静态快捷方式启动活动的现有实例

    我的应用程序中有一个活动 MainActivity 并且有一个静态快捷方式 指向 TempActivity 由于静态快捷方式将始终设置 FLAG ACTIVITY NEW TASK 和 FLAG ACTIVITY CLEAR TASK 因此
  • 使用默认路径中的文件创建数据库

    我想创建一个创建数据库的 SQL 脚本 现在 我有这个 CREATE DATABASE Documents ON PRIMARY NAME N Documents FILENAME N Documents mdf LOG ON NAME N
  • Android 上的硬币识别

    我目前正在开发一个 Android 应用程序 它能够拍摄硬币的现有图像 或者使用内置摄像头扫描单个硬币 非常像 Google Goggles 我正在使用 Android 版 OpenCV 我的问题如下 什么方法最适合使用 OpenCV 在
  • Android,语言文件不起作用

    我现在正在创建一个 Android 应用程序 并尝试为我的母语添加语言文件 但在某种程度上 这对我不起作用 我尝试在两部不同的手机中加载该应用程序 但结果相同 之前创建过语言文件 效果良好 但这次不行 手机设置为瑞典语 语言文件适用于我创建
  • 在 Android 中关闭 Spinner 中的下拉菜单

    在 Android 中打开和关闭微调器时 我需要为箭头图标设置动画 打开微调器时我可以旋转箭头 我只是放了一个setOnTouchListener on the Spinner 当下拉菜单关闭或隐藏时 问题就来了 因为我不知道如何在该操作上
  • 用于代码生成的 ANTLR 工具版本 4.7.1 与当前运行时版本 4.5.3 不匹配

    我正在开发一个 Android 应用程序 当前使用 DSL 和一些库 突然构建给了我这个错误 任务 app kaptDebugKotlin 失败 用于代码生成的 ANTLR 工具版本 4 7 1 与当前运行时版本 4 5 3 不匹配 用于解
  • 如何知道点击的widget id?

    我已经实施了一个widget与ImageButton and a TextView That ImageButton启动一个activity当它被点击时 这activity使用用户在活动上写入的内容更新小部件文本EditText 现在的问题
  • 将搜索结果更新为 Android 中的 Lazy Adapter

    我有项目列表 想为其实现搜索功能 因此 我有一个带有 addTextChangedListener 的文本框 搜索结果运行良好 但当我尝试将结果设置为 ListView 时 新结果将附加到旧结果中 我正在使用惰性适配器 如何清除适配器中的旧
  • Oracle SQL 分析查询 - 类似递归电子表格的运行总计

    我有以下数据 由A值 排序依据MM 月 The B列计算为GREATEST current value of A previous value of B 0 以类似电子表格的方式 我怎样才能计算B使用 SQL 查询 我尝试使用分析函数 但未
  • 如何在Android中隐藏应用程序标题? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想隐藏应用程序标题栏 您可以通过编程来完成 import android app Activity import android os
  • MPAndroidChart:组合图表

    我在用MPAndroidChart 库 https github com PhilJay MPAndroidChart 我想用CombinedChart创建这样的图表 那可能吗 我尝试了一下 但似乎不起作用 因为 这些条目没有按我的预期工作
  • 协程和 Firebase:如何实现类似 Javascript 的 Promise.all()

    在 Javascript 中 您可以同时启动两个 或更多 异步任务 等待它们完成 然后执行某些操作 继续 const firstReturn secondReturn await Promise all firstPromise secon
  • 在 Android SDK 中通过单击按钮更改背景颜色不起作用

    我有一个简单的程序 可以在单击按钮后更改背景颜色 但它不起作用 public class ChangeBackgroundActivity extends Activity Called when the activity is first
  • 在Android中提取视频帧

    我想知道是否可以从 Android 中正在运行的视频中提取帧 我需要定期提取帧并将其发送以进行进一步处理 有人能为我找到答案吗 Thanks Abhi 您可以使用媒体元数据检索器 http developer android com ref
  • Exif 方向标签返回 0

    我正在开发一个自定义相机应用程序 我面临以下问题 当我尝试使用检索方向时ExifInterface 它总是返回 0 ORIENTATION UNDEFINED 这使我无法将图像旋转到正确的状态 从而无法正确显示 我使用示例代码来设置相机旋转
  • 在android中的日期选择器对话框中显示当前日期

    我多次尝试在日期选择器对话框中显示当前日期 但失败了 它显示 1 1 1990 我已经遵循了堆栈溢出的一些答案 但不幸的是这些对我不起作用 谁能解释一下在日期选择器对话框中显示当前日期的代码 谢谢 It may help you publi
  • MySQL - 连接 a 或 b

    假设我有一个TABLE a其中一个COLUMN data是一个join其他 2 张桌子 TABLE b and TABLE c 因为我想得到一个COLUMN info in b or c 事情是a data将匹配only with b da
  • PostgreSQL 位图堆扫描索引非常慢,但仅索引扫描很快

    我创建了一个包含 43kk 行的表 并用值 1 200 填充它们 因此 表中每个数字大约为 220k create table foo id integer primary key val bigint insert into foo se
  • 将数据放入短信发送意图中?

    我想发送短信 如果文字太长 我会将其分成多条消息 我试图将一些额外的信息放入 已发送 意图中 以了解哪个部分已发送 以及所有部分何时完成 ArrayList
  • Android:列“_id”不存在

    我收到这个错误 IllegalArgumentException 列 id 不存在 当使用SimpleCursorAdapter从我的数据库中检索 该表确实有这个 id柱子 注意到这是一个常见问题 我尝试根据网上的一些解决方案来解决它 但它

随机推荐

  • 32 位系统上 4GB 限制背后的数学原理

    我有一个与 32 位内存地址相关的非常基本的问题 我的理解是2 32是32位系统上可能的内存地址的最大数量 我感到困惑的是我们如何从这个数字达到所谓的 4GB 限制 在我的研究中我看到有些人 http www zdnet com blog
  • 有没有办法用 git diff 显示*仅*空白差异?

    我想在自己的提交中提交所有空白更正 以保持其他所有内容不受空白更改的影响 很容易过滤out空白差异与git diff使用这样的东西 git diff ignore all space ignore space change ignore s
  • 使用 Maven 隐藏清单条目

    当使用maven构建jar文件时 它会在META INF MANIFEST MF中创建一个清单文件 目前其内容为 Manifest Version 1 0 Archiver Version Plexus Archiver Built By
  • 在编译时防止标头包含在某些文件中?

    我有一个头文件 我可以控制它的内容 另外 我有一个接口 I1 在其他一些文件中定义 其中各种 派生的实现 我想禁止这些实现包括这个 头文件 因此 在编译时 如果包含该文件 编译将会失败 否则它将照常继续 所以我有头文件和接口定义 在其他文件
  • StorageMetadata'没有成员'downloadURL'[重复]

    这个问题在这里已经有答案了 我使用下面的代码 但是当我更新代码和 pod 时出现以下错误 StorageMetadata 没有成员 downloadURL static func uploadVideoToFirebaseStorage v
  • 运行 axis2 客户端版本 1.5

    因此 我已经没有办法尝试真正让客户端连接到我通过 axis2 运行的 SOAP 服务 我尝试了两种方法 一种是使用 wsdl2java 构建存根和关联的客户端类 然后编写一个客户端类来构建请求消息并通过存根发送它们 另一种方法是使用 Ser
  • 为什么添加多个图像时我的 div 不水平滚动?

    我有一个外部 div 在其内部有一个内部 div 其中包含图像列表 当图像比外部 div 宽时 我想让它水平滚动 但它只是将图像放在下一行而不是扩展 如果我添加很多行 div 会垂直滚动 但水平滚动则不会 我尝试过的每个浏览器都会出现这种情
  • Windows 上的 Luarocks 无法识别我的 lua_libdir

    我想使用 luarocks 在 lua 上安装 nngraph 使用此代码 luarocks from https raw githubusercontent com torch rocks master install nngraph 但
  • Mvn 安装或 Mvn 包

    我是 Maven 新手 我有一个基于 Java 的 Web 项目 在 MyEclipse 中配置了 Maven 现在 如果我修改了任何 java 文件 那么我需要做什么Run as gt Mvn install or Mvn package
  • Javascript IE 和 getElementsByClassName 问题[重复]

    这个问题在这里已经有答案了 所以首先我正在学习 JS 并且在我知道我需要的所有内容之前不会使用库 http www tombarrasso com search http www tombarrasso com search 话虽如此 为什
  • Kafka 控制台消费者:如何仅获取主题中的最后 N 条消息,而不是从头获取所有消息?

    我可以做这个 bin kafka avro console consumer zookeeper 10 0 0 225 2181 kafka topic myTopic property schema registry url http 1
  • 更改 NSUserDefaults 中的对象,无需创建和重新设置副本

    我已经将字典存储在NSUserDefaults我需要在这本字典中添加 删除项目 让我困扰的是 要做到这一点 我必须创建整个字典的可变副本 更改一个元素并用新副本替换整个字典 copy defaults objectForKey foo mu
  • .htaccess 基本 mod 重写

    我才刚刚开始学习如何使用 htaccess 文件重写 url 我将如何改变 http www url net games game one php http www url net games game one php 进入这个 http
  • neo4j - 如何设置带有属性值的标签

    我有没有标签但有属性 NodeType 的节点 有没有办法用 NodeType 属性的值设置这些节点的标签 Thanks 不可以 目前无法用变量定义标签 您必须在应用程序中通过获取要在其上添加标签的所有节点并发送 Cypher 查询来添加此
  • 如何在每个屏幕上为正文内的部分或 div 制作全高?

    Hi all am created a html layout having two sides left and right left one having navigation menu and right having content
  • 用前导零填充字符串,使其在 SQL Server 2008 中为 3 个字符长

    我有一个在 SQL Server 2008 R2 中首次创建时长度最多为 3 个字符的字符串 我想用前导零填充它 所以如果它的原始值是 1 那么新值将是 001 或者 如果其原始值为 23 则新值为 023 或者 如果其原始值为 124 则
  • 将运算符作为参数传递

    我想要一个计算 2 的函数bool变量 如真值表 例如 Since T F T then myfunc t f defined as bool myfunc char lv char rv should return true 如何传递第三
  • 查明函数是匿名的还是在对象中定义的

    我正在尝试用 JavaScript 编写一个辅助方法 如果发送函数或对函数的引用 它的行为应该有所不同 我想像这样使用它 helper div function return false helper div obj fn 我不明白的是 如
  • UIKeyboardTypeNamePhonePad - 显示选项

    我需要使用名称电话键盘类型 UIKeyboardTypeNamePhonePad 但在选择文本字段时首先显示数字键盘 我需要输入数据 例如 123 第657章 450b 123a 我总是需要先输入一个数字 但有时最后需要输入 A B 您可以
  • Android SQLite - 为什么我的数据库每次都重新创建?

    我试图更好地理解 SQLiteOpenHelper 类以及 onCreate 和 onUpgrade 的调用方式和时间 我的问题是 每次我退出并启动我的应用程序 从技术上讲 实际上是每次我创建 MyDB 的新实例时 都会调用 onCreat