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,则行已成功插入。
假设我有一种方法可以插入一个 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,则行已成功插入。