sqlite 在android room中,数据库的名称应用程序是否有作用域?

j5fpnvbx  于 2022-11-24  发布在  SQLite
关注(0)|答案(2)|浏览(165)
  • (我是Android开发新手)*

比如说android应用程序-1通过roo创建了一个数据库hello
那么android app-2能否在同一部手机上创建一个数据库hello
我的猜测是肯定的,因为房间使用sqlite,每个应用程序可能会启动一个新的sqlite示例,并可能会存储其数据在私人空间,否则太容易产生冲突。但我不确定。

    • 问题是:**
  • 两个应用程序会共享同一个sqlite示例吗?还是每个应用程序都将启动一个新的sqlite?
  • 数据库的名称是否为应用程序范围?
  • 我猜数据库的数据也是应用程序私有的?
  • (我搜索了一下,没有得到确认。)*
vddsk6oq

vddsk6oq1#

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

h43kikqp

h43kikqp2#

实际上SQLite是一组文件处理例程(比简单的读写更复杂)。
Android设备内置了例程(尽管SQLite的版本不同,通常向后兼容)。
Room是SQLite周围的 Package 器,因此例程和程序适合于面向对象的方法来访问数据(文件)。
不像,例如,MySQL,SQLite,它不是一个服务器,管理事务从外部来源,所以SQLite不是一个运行示例后台应用程序/服务.(命令行界面将是虽然)
一个设备可以有许多应用程序使用例程访问和更新底层文件(如果使用默认WAL,则为3个文件(预写日志、核心数据库文件、wal文件和第三个文件shm文件WAL的WAL文件),(如果使用日志模式,则为2个文件)。

  • WAL的变更会套用至WAL档案,然后再提交至核心/主档案。同样地,shm档案也会套用至WAL档案。这可让复原作业简单有效地删除/清空WAL档案。
  • 日志模式日志是对核心数据库所做更改的记录/日志。回滚是通过根据日志反转更改来完成的。
  • WAL通常效率更高。
  • 通常,这都由SQLite例程处理。

如果需要的话,一个应用程序可以自己访问多个数据库。SQLite甚至可以通过将数据库ATTACH到另一个数据库来访问多个数据库。
默认情况下,数据库存储在应用程序的受保护数据存储区域中,因此对于应用程序是唯一的。默认情况下,您不能在一个应用程序中使用两个相同的数据库名称

  • 您可以说在不同的位置有两个Hello数据库,例如data/data/the_package/databases/hellodata/data/myotherdatabasesfolder/hello
  • 请注意,您可以使用Room来实现这一点,当然,只使用SQLite API也是可行的。

因此,App 1和App 2可以具有相同的hello数据库,因为文件将位于不同的应用程序特定位置(默认为data/data/the_apps_package_name/databases)。

相关问题