Tôi chỉ muốn một thông báo duy nhất sau khi tất cả chèn hàng loạt được thực hiện vào cơ sở dữ liệu. Vui lòng cung cấp một ví dụ để sử dụng hàm bulkInsert(). Tôi không thể tìm thấy một ví dụ thích hợp trên internet. Hãy giúp tôi!!!!Cách sử dụng hàm bulkInsert() trong android?
Trả lời
Đây là bulkInsert sử dụng Trình cung cấp nội dung.
public int bulkInsert(Uri uri, ContentValues[] values){
int numInserted = 0;
String table;
int uriType = sURIMatcher.match(uri);
switch (uriType) {
case PEOPLE:
table = TABLE_PEOPLE;
break;
}
SQLiteDatabase sqlDB = database.getWritableDatabase();
sqlDB.beginTransaction();
try {
for (ContentValues cv : values) {
long newID = sqlDB.insertOrThrow(table, null, cv);
if (newID <= 0) {
throw new SQLException("Failed to insert row into " + uri);
}
}
sqlDB.setTransactionSuccessful();
getContext().getContentResolver().notifyChange(uri, null);
numInserted = values.length;
} finally {
sqlDB.endTransaction();
}
return numInserted;
}
Chỉ gọi nó một lần khi bạn sẽ có thêm giá trị ContentValues trong ContentValues [].
Tôi đã tìm kiếm vĩnh viễn để tìm hướng dẫn để triển khai điều này ở bên hoạt động và bên cung cấp nội dung. Tôi đã sử dụng câu trả lời "Warlock" từ phía trên và nó hoạt động tốt ở phía bên cung cấp nội dung. Tôi đã sử dụng câu trả lời từ this post để chuẩn bị mảng ContentValues ở cuối hoạt động. Tôi cũng đã sửa đổi ContentValues của mình để nhận từ một chuỗi các giá trị được phân cách bằng dấu phẩy (hoặc các dòng mới, dấu chấm, dấu chấm phẩy). Điều này trông giống như sau:
ContentValues[] bulkToInsert;
List<ContentValues>mValueList = new ArrayList<ContentValues>();
String regexp = "[,;.\\n]+"; // delimiters without space or tab
//String regexp = "[\\s,;.\\n\\t]+"; // delimiters with space and tab
List<String> splitStrings = Arrays.asList(stringToSplit.split(regexp));
for (String temp : splitStrings) {
Log.d("current student name being put: ", temp);
ContentValues mNewValues = new ContentValues();
mNewValues.put(Contract.KEY_STUDENT_NAME, temp);
mNewValues.put(Contract.KEY_GROUP_ID, group_id);
mValueList.add(mNewValues);
}
bulkToInsert = new ContentValues[mValueList.size()];
mValueList.toArray(bulkToInsert);
getActivity().getContentResolver().bulkInsert(Contract.STUDENTS_CONTENT_URI, bulkToInsert);
Tôi không thể tìm thấy cách tách biệt hơn để gắn chuỗi tách được phân tách thẳng vào mảng ContentValues cho bulkInsert. Nhưng chức năng này cho đến khi tôi tìm thấy nó.
Thử phương pháp này.
public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) {
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
switch (sUriMatcher.match(uri)) {
case CODE_WEATHER:
db.beginTransaction();
int rowsInserted = 0;
try {
for (ContentValues value : values) {
long _id = db.insert(WeatherContract.WeatherEntry.TABLE_NAME, null, value);
if (_id != -1) {
rowsInserted++;
}
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
if (rowsInserted > 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
return rowsInserted;
default:
return super.bulkInsert(uri, values);
}
}
Câu trả lời của Warlock sẽ chèn toàn bộ hoặc không có hàng nào. Ngoài ra, thực hiện các tác vụ tối thiểu giữa setTransactionSuccessful()
và endTransaction()
và tất nhiên không có hoạt động cơ sở dữ liệu giữa hai cuộc gọi chức năng này.
Mã nguồn: Udacity
- 1. Android khi sử dụng ContentResolver applyBatch hoặc BulkInsert
- 2. Cách sử dụng hàm calc() bên trong một hàm khác
- 3. Cách sử dụng hàm ko.validation.group
- 4. Cách sử dụng hàm numpy.append
- 5. Cách sử dụng hàm Utilities.sleep()
- 6. Cách sử dụng TabHost.OnTabChangeListener trong android?
- 7. Cách sử dụng unordered_map trong Android?
- 8. Cách sử dụng Zxing trong android
- 9. Cách sử dụng Bưu kiện trong Android?
- 10. Cách sử dụng TextSwitcher Trong Android
- 11. Cách sử dụng hàm writeImage() của imagick?
- 12. Cách sử dụng hàm trim() của jQuery
- 13. Cách sử dụng Android DownloadManager?
- 14. gọi hàm bằng cách sử dụng chuỗi trong xcode
- 15. Làm cách nào để sử dụng hàm round() trong C?
- 16. Cách nào để sử dụng hàm rand() trong C++?
- 17. Cách sử dụng dấu chấm/dấu chấm trong hàm R
- 18. Cách sử dụng Android ViewPager?
- 19. Android: cách sử dụng SectionIndexer
- 20. Sử dụng getopts bên trong hàm Bash
- 21. Sử dụng hàm tạo trong một cuộc gọi hàm?
- 22. Cách sử dụng thư viện openSSL trong ứng dụng ANDROID
- 23. Cách sử dụng iptables trong ứng dụng Android
- 24. Cách sử dụng GLM trong ứng dụng NDK của Android
- 25. Cách sử dụng AsyncTask đúng cách trong Android
- 26. Sử dụng _ trong các hàm lambda scala
- 27. Sử dụng hàm generate_series sql() trong redshift
- 28. Sử dụng hàm hủy trong C#?
- 29. sử dụng hàm tạo riêng trong lớp
- 30. Sử dụng stringstream bên trong hàm ostream
Điều này sẽ * không * hoàn tất các lần chèn còn lại nếu một lỗi không đúng? – Anthony
Thao tác này sẽ hoàn nguyên/khôi phục từng lần chèn một nếu có bất kỳ ngoại lệ nào trước khi gọi setTransactionSuccessful trong khối try/catch đó. Trong ngắn hạn nếu có một ngoại lệ, bạn sẽ nhận được không có chèn ở tất cả. – Warlock
Tôi gặp lỗi nói rằng 'Biến 'bảng' có thể chưa được khởi tạo'. Đặt khai báo thành 'String table =" ";' giải quyết vấn đề. –