Android 数据库操作和 return 值

Android database operations and return values

假设我有一种方法可以插入一个 return 布尔值取决于插入是否成功的产品:

public boolean insertProduct(Product product) {
    ContentValues values = new ContentValues();
    values.put("name", product.name);
    values.put("price", product.price);
    boolean inserted = true;
    SQLiteDatabase db = this.getWritableDatabase();
    try {
        db.insertOrThrow("products",null,values);
    } catch (SQLException e) {
        inserted = false;
    }
    return inserted;
}

如果在另一个 activity 我有:

boolean productAdded = dbHelper.insertProduct(newProduct);
if (productAdded) {
     // do something
} else {
     // do something else
}

我知道数据库插入需要一些时间(在非常慢的设备上可能需要相对较长的时间),那么这是一种测试插入是否成功的安全方法吗?将 if (productAdded) 等到它从 insertProduct() 方法获得 return 值,并且该方法将等待 return inserted 布尔值直到插入成功或失败?

if (productAdded) 是否会等到它从 insertProduct() 方法中获取 return 值??

Yes it will Wait.

默认情况下,所有 Sqlite 数据库操作仅在 UI 线程上执行。

是的,默认情况下,每条执行语句都是同步的。这意味着每个语句都将等待右侧操作完成,然后再分配给左侧。这不仅仅是数据库调用。每个需要一段时间的语句都会有效地阻止代码执行直到完成,因此需要异步方法。

在你的情况下,是的,可以安全地假设返回的布尔值将是完整函数执行的正确值,但正如你正确指出的那样,这需要时间,并且可以阻止代码。在 android 中,您可以考虑将此代码移动到异步任务并触发另一个 activity 到 运行 它是通过异步任务的 onPostExecute 中的处理程序运行的。

SqliteDatabase的insertOrThrow方法也是returns一个long值,表示插入行的id。您还可以检查 long 值,如果 long 值为 -1,则不会插入任何行,但如果它的值不是 -1,则行已成功插入。