bounty还有2天到期。回答此问题可获得+50声望奖励。HelloCW正在寻找一个答案从一个有信誉的来源。
在我的Android Studio项目中,我使用SQLite和Room进行数据库操作。后台服务包含几个暂停函数,负责更新SQLite数据库中的行。考虑到SQLite应用了表级锁,这就提出了一个问题,即当多个挂起函数试图同时更新同一SQLite数据库的不同行时会发生什么。SQLite数据库是否会被锁定,从而导致应用程序崩溃?
cetgtptt1#
使用Room,您将能够一次更新多个列。但是,请记住,如果您的id列表包含超过999个项目,则可能会引发异常:SQLiteException: too many SQL variables (Sqlite code 1)
Room
SQLiteException: too many SQL variables (Sqlite code 1)
5gfr0r5j2#
当多个挂起函数试图同时更新同一SQLite数据库的不同行时。挂起函数不是独立的线程;它们只是提供允许不同任务在协同程序中并发运行的延续。并发运行并不意味着简洁地/并行地运行,而是以连续的方式(异步地)运行一小段时间。因此,如果您在同一协程/作业中的多个挂起函数中使用Room更新不同的行;它们实际上并不是同时运行的。但是,您担心的是,当您在不同的线程(不同的协程调度程序)中运行这些更新时;一般来说,有些数据库系统限制在多个线程中同时使用同一个数据库连接; Room不会,Room会处理这个问题,因为它是线程安全的,并且是support multithreaded。幸运的是,Room是线程安全的,并且在单独的独立数据库Transaction(Documentation Reference)中运行每个用Room CRUD注解注解的Dao方法。
Dao
2条答案
按热度按时间cetgtptt1#
使用
Room
,您将能够一次更新多个列。但是,请记住,如果您的id列表包含超过999个项目,则可能会引发异常:SQLiteException: too many SQL variables (Sqlite code 1)
5gfr0r5j2#
当多个挂起函数试图同时更新同一SQLite数据库的不同行时。
挂起函数不是独立的线程;它们只是提供允许不同任务在协同程序中并发运行的延续。并发运行并不意味着简洁地/并行地运行,而是以连续的方式(异步地)运行一小段时间。
因此,如果您在同一协程/作业中的多个挂起函数中使用Room更新不同的行;它们实际上并不是同时运行的。
但是,您担心的是,当您在不同的线程(不同的协程调度程序)中运行这些更新时;一般来说,有些数据库系统限制在多个线程中同时使用同一个数据库连接; Room不会,Room会处理这个问题,因为它是线程安全的,并且是support multithreaded。
幸运的是,Room是线程安全的,并且在单独的独立数据库Transaction(Documentation Reference)中运行每个用Room CRUD注解注解的
Dao
方法。