마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SQLITE 에서 LIST<?> 삽입을 어떻게 하는게 좋은 방법일까요 ? 조언이 필요합니다.

0 추천
SDCARD 에서  MP3 목록을 불러와서 DB 에 담고 있는데요 .

이미 만들어진 리스트에 또 추가하는 경우도 있어서 중복체크를 해야하는 데 적당한 방법이 잘 생각이 안나네요 .

지금 로직은

insert(List<musicdata>   mp3list){

   1. getContentResolver().query 로 우선 있는지 검색

   2. 업다면 getContentResolver().insert 함.

}

이렇게 하면 리스트에 아이템이 많아지면(3~400) 꽤 시간이(2~3초 이상 ) 걸리더군요 .

리스트를 한번에 삽입하는 방법이나 .

좀더 효율적인 로직이 없을까요 ?

고수님들의 조건을 구합니다 .
지구정복단 (1,380 포인트) 님이 2013년 2월 28일 질문

2개의 답변

+1 추천
 
채택된 답변

트렌젝션 걸어놓고 insert 하세요

ContentProvider에서 applyBatch 메서드 오버라이드 하셔서 아래와 같이 수정하고

	@Override
	public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
			throws OperationApplicationException {
		final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        db.beginTransaction();
        try {
            final int numOperations = operations.size();
            final ContentProviderResult[] results = new ContentProviderResult[numOperations];
            for (int i = 0; i < numOperations; i++) {
                results[i] = operations.get(i).apply(this, results, i);
            }
            db.setTransactionSuccessful();
            return results;
        } finally {
            db.endTransaction();
        }
	}

ContentProviderOperation List 생성해서 ContentResolver에 applyBatch 메서드로 넘겨 주시면 됩니다.

동네가수 (460 포인트) 님이 2013년 3월 1일 답변
지구정복단님이 2019년 3월 7일 채택됨
+1 추천
뭐... 전 미디어스캐너에대해서 검색을 해보신 뒤 그걸 쓰라고 추천해드리고 싶네요

미디어스캐너도 mp3등을 검색해서 db화 해놓습니다

 

답변은..

insert into mp3list (???) values (???) where not exists select * from mp3list where (where절)

이거일겁니다

(제가 sqlite3을 잘 몰라서... 약간 다를지도요)
수상한i (8,050 포인트) 님이 2013년 2월 28일 답변
ㅎㅎ 좋은방법 시도해 보겠습니다 .
ps. 미디어 스케너에서 이미 가져와서 따로 DB를 만드느냐 그렇습니다 ㅎㅎ 제가 글을 잘못썻네요 ㅎㅎ
...