繁体   English   中英

在android房间里,数据库的名字app是作用域吗?

[英]In android room, is the database's name app scoped?

(我是 android 开发新手)

假设 android app- 1通过roo创建了一个数据库hello
那么 android app- 2可以在同一部手机上创建一个数据库hello吗?

我的猜测是肯定的,由于房间使用sqlite,每个应用程序可能会启动一个新的sqlite实例,并且可能将其数据存储在私有空间中,否则太容易发生冲突。 但我不确定。

问题是:

  • 2 个应用会共享同一个 sqlite 实例,还是每个应用都将启动一个新的 sqlite?
  • 数据库的名称 app 是否有作用域?
  • 我猜数据库的数据也是应用程序私有的?

(我已经搜索过这个,没有得到确认。)

默认情况下,Room 数据库存储在内部存储中,每个应用程序都有自己的内部存储。 您可以有两个名为hello的数据库,每个应用一个,没有问题。

真的 SQLite 是一组文件处理例程(虽然比简单的写入和读取更复杂)。

Android 设备带有内置的例程(尽管 SQLite 的不同版本通常向后兼容)。

Room 是 SQLite 的包装器,因此例程和迎合面向 object 的方法来访问数据(文件)。

例如,与 MySQL、SQLite 不同,它不是管理来自外部源的事务的服务器,因此 SQLite 不是正在运行的实例后台应用程序/服务。 (虽然命令行界面是)

一个设备可以有许多应用程序使用例程来访问和更新底层文件(如果使用默认 WAL 则为 3 个文件(预写日志、核心数据库文件、wal 文件和第三个文件 shm 文件一个 WAL 文件) WAL),(如果使用 JOURNAL 模式,则为 2 个文件)。

  • 使用 WAL 更改将应用于 WAL 文件,然后有时将其提交到核心/主文件。 对于 WAL 文件的 shm 文件也是如此。 这允许回滚简单地有效地删除/清空 WAL 文件。
  • JOURNAL 模式日志是对核心数据库所做更改的记录/日志。 回滚是通过根据 JOURNAL 反转更改来完成的。
  • WAL 通常更有效。
  • 通常,这一切都由 SQLite 例程处理。

如果需要,一个应用程序本身可以访问多个数据库。 ATTACH甚至可以通过将数据库连接到另一个来满足访问多个数据库的需求。

默认情况下,数据库存储在应用程序的受保护数据存储区域中,因此对应用程序是唯一的。 默认情况下,您不能做的是在一个应用程序中使用相同的数据库名称两次

  • 你可以说在不同的位置有两个 hello 数据库,例如data/data/the_package/databases/hellodata/data/myotherdatabasesfolder/hello
    • 请注意您将如何使用 Room 来解决这个问题,当然仅使用 SQLite API 是可行的。

因此 App1 和 App2 可以具有相同的hello数据库,因为文件将位于不同的 App 特定位置(默认情况下为data/data/the_apps_package_name/databases )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM