모든 대량 삽입이 데이터베이스에 완료된 후 단 하나의 알림 만 원합니다. bulkInsert() 함수를 사용하는 예제를 제공하십시오. 인터넷에서 적절한 예를 찾을 수 없습니다. 도와주세요!!!!android에서 bulkInsert() 함수를 사용하는 방법은 무엇입니까?
7
A
답변
37
ContentProvider를 사용하여 bulkInsert입니다.
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;
}
ContentValues [] 값 배열에 더 많은 ContentValues가있을 때 한 번만 호출하십시오.
3
나는 활동 측면과 콘텐츠 제공 업체 측면에서이를 구현하는 자습서를 찾기 위해 영원히 수색했다. 위의 "Warlock 's"답변을 사용했으며 콘텐츠 제공 업체 측면에서 훌륭하게 작동했습니다. this post의 대답을 사용하여 활동 끝에서 ContentValues 배열을 준비했습니다. 또한 쉼표로 구분 된 값 (또는 새 줄, 마침표, 세미 콜론)의 문자열에서 수신하도록 ContentValues를 수정했습니다. 어떤이처럼 보였다 :
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);
내가 bulkInsert에 대한 ContentValues 배열에 똑바로 묘사 분할 문자열을 연결하는 청소기 방법을 찾을 수 없습니다. 하지만이 기능은 내가 발견 할 때까지 기능합니다.
0
이 방법을 시도해보십시오.
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);
}
}
워록의 대답은 전체 또는 일부 행을 삽입합니다. 또한 setTransactionSuccessful()
과 endTransaction()
사이의 최소 작업을 수행하고 이러한 두 함수 호출 간에는 데이터베이스 작업이 필요하지 않습니다.
코드 소스 : Udacity
관련 문제
- 1. Android에서 ContentResolver를 사용하는 경우 applyBatch 또는 BulkInsert
- 2. TranslateAnimation을 Android에서 사용하는 방법은 무엇입니까?
- 3. GetFileVersionInfo 함수를 사용하는 방법은 무엇입니까?
- 4. django.views.i18n.set_language() 함수를 사용하는 방법은 무엇입니까?
- 5. rand 함수를 사용하는 방법은 무엇입니까?
- 6. Android에서 setZOrderMediaOverlay를 올바르게 사용하는 방법은 무엇입니까?
- 7. sp_tablecollations_100의 기능은 무엇입니까? 그냥 bulkinsert 전에
- 8. Android에서 서비스의 SQLite를 사용하는 방법은 무엇입니까?
- 9. android에서 UDP 소켓을 사용하는 방법은 무엇입니까?
- 10. Android에서 Space 클래스를 올바르게 사용하는 방법은 무엇입니까?
- 11. Android에서 채점하기 위해 타이머를 사용하는 방법은 무엇입니까?
- 12. Android에서 UTF-8 인코딩을 사용하는 방법은 무엇입니까?
- 13. Android에서 탭 위젯을 사용하는 방법은 무엇입니까?
- 14. Android에서 어댑터를 사용하는 가장 좋은 방법은 무엇입니까?
- 15. 인간의 소리를 Android에서 입력으로 사용하는 방법은 무엇입니까?
- 16. Android에서 Soundcloud 스트리밍을 사용하는 방법은 무엇입니까?
- 17. android에서 업데이트 쿼리를 사용하는 방법은 무엇입니까?
- 18. Android에서 이러한 특수 문자를 사용하는 방법은 무엇입니까?
- 19. Android에서 RPC를 사용하는 표준 방법은 무엇입니까?
- 20. jQuery의 ajax 함수를 사용하는 방법은 무엇입니까?
- 21. 이미지를 생성하는 함수를 사용하는 방법은 무엇입니까?
- 22. 소켓 프로그래밍에서 select() 함수를 사용하는 방법은 무엇입니까?
- 23. 소켓에 write() 함수를 올바르게 사용하는 방법은 무엇입니까?
- 24. 테이블 반환 함수를 올바르게 사용하는 방법은 무엇입니까?
- 25. PHP 버전을 벗어나는 함수를 사용하는 방법은 무엇입니까?
- 26. PHP 클래스에서이 함수를 사용하는 방법은 무엇입니까?
- 27. 익명 함수를 사용하는 가장 깨끗한 방법은 무엇입니까?
- 28. System.Convert.ToInt64 함수를 사용하는 올바른 방법은 무엇입니까?
- 29. r.net에서 lm 함수를 사용하는 방법은 무엇입니까?
- 30. Left join에서 LEN 함수를 사용하는 방법은 무엇입니까?
오른쪽 삽입에 실패하면 나머지 삽입이 완료되지 않습니다. – Anthony
try/catch 블록에서 setTransactionSuccessful을 호출하기 전에 예외가 발생하면 매 삽입마다 되돌릴/롤백합니다. 간단히 말해, 예외가 있으면 삽입하지 않을 것입니다. – Warlock
'변수 '테이블'이 초기화되지 않았을 수 있습니다. '라는 오류가 나타납니다. 선언을'String table = "";로 설정하면 문제가 해결됩니다. –