Android ContentProvider - تحديث داخل طريقة إدراج
-
28-09-2019 - |
سؤال
هل من المقبول الاتصال SQLiteDatabase
طريقة التحديث في insert()
طريقة Overridden لمزود المحتوى؟
المحلول
لا بأس في الأساس ، لكن بما أنك لم تقدم رمزًا ، يمكنني فقط نشر طريقتين محتملين لذلك
أولاً:
// In your content provider
public Uri insert(...) {
long insertId = db.insert(...);
if(insertId == -1) {
// insert failed, do update
db.update(...);
}
}
ثانيا:
public Uri insert(...) {
long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE)
if(insertId == -1) {
// insert and update/replace failed
}
}
الدفع sqlitedatabase للرجوع إليها على المعلمة Forth. في معظم الحالات ، يجب أن تكون الطريقة الأخيرة كافية ، إلا إذا كنت تريد فقط تحديث حقول معينة إذا كان الصف موجود ولديها جميع الحقول إذا لم يكن كذلك.
قد تكون الحاجة الأكثر فائدة لإدراجها ، حيث يمكنك إدراج صف ، وإذا كان موجودًا بالفعل ، فتجاهل الإدراج وبدلاً من ذلك إرجاع المفتاح الأساسي/الأساسي للصف الموجود بالفعل.
نصائح أخرى
إنه اختيارك لما تكتبه في أساليبك المتجاوز. لذا نعم ، لا بأس.
لا أعرف ما الذي تحاول القيام به ، لكنك قد ترغب في إلقاء نظرة على SQLiteDatabase
'س replace()
الطريقة أيضا. ربما يناسب احتياجاتك بشكل أفضل.