gpt4 book ai didi

sql - Android的SQLiteStatement(准备好的语句)是线程安全的吗? IE。 "bind*, bind*... execute"是原子的吗?

转载 作者:行者123 更新时间:2023-11-29 18:23:42 33 4
gpt4 key购买 nike

我想知道 Android 中的准备语句(SQLiteStatement 的实例)是否是线程安全的。我特别询问以下情况:

在 ContentProvider 中,您在 onCreate 期间创建预编译的插入语句。然后,在覆盖的插入方法中,您通过将一组参数绑定(bind)到它并对其调用 executeInsert 来使用该语句。

我们知道 ContentProvider 必须以线程安全的方式编写。如果 SQLiteStatement 没有为每个线程绑定(bind)参数,则对提供者的插入方法的并发调用将改变语句的绑定(bind)并导致不可预测的行为。

Android 自己的联系人提供程序以这种方式使用准备好的语句 (http://bit.ly/bDuKAT),所以我倾向于相信它们实际上是线程安全的。查看 SQLiteStatement 的源代码我看不出如何(http://bit.ly/9M1Swv)。

那么,SQLiteStatement(或 SQLiteProgram)在参数绑定(bind)方面是否是线程安全的?

最佳答案

the SQLiteStatement documentation中有明确说明那个

SQLiteStatement is not internally synchronized

因此,该类不是线程安全的,不能被多个线程并发使用而不会产生意外结果。

关于sql - Android的SQLiteStatement(准备好的语句)是线程安全的吗? IE。 "bind*, bind*... execute"是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3750884/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com