2011-07-30 4 views
4

아주 간단한 명령을 사용하여 SQLite 데이터베이스에서 행을 삭제하려고합니다. 그러나 명령을 성공적으로 실행 한 후에 행은 DB에 남아 있습니다!안드로이드 sqlite 삭제 실제로 행을 삭제하지 않습니다

SQLiteDatabase dbinst = mydb.getWritableDatabase(); 

try 
{ 
    dbinst.beginTransaction(); 
    int del = dbinst.delete("sms", "wassent = ? or waserror = ? or wasaborted = ?", new String[] {"1", "1", "1"}); 
    clog.debug("Rows deleted: " + del); 
    dbinst.setTransactionSuccessful(); 
} 
catch(Exception e) 
{ 
    clog.error(e.toString(),e); 
} 

dbinst.close(); 

로거에는 "rows deleted : 3"이 표시되며 예외는 발생하지 않습니다. 그러나 즉시 쿼리를 수행 할 때 행이 여전히 있습니까?

내가 여기에서 잘못된 점을 분명히하고 있습니까?

+0

해결 했습니까? –

답변

1

변경 사항을 실제로 적용하려면 endTransaction으로 전화해야합니다. 더 많은 정보는 여기에서 찾을 수 있습니다 : beginTransaction() documentation

+0

단순 삭제를 위해 실제로 트랜잭션을 사용하는 것이 어떤 식 으로든 도움이 되나요? 삭제할 행이 여러 개인 단일 삭제는 어떨까요? 성능이 뛰어나거나 스레드 안전성이 우수한가? –

+0

@androiddeveloper 여러 테이블을 원자 적으로 업데이트하려는 경우 (모든 업데이트가 작동하거나 모두 실패하거나 혼합 된 결과가없는 경우) 트랜잭션이 유용합니다. 또한 응용 프로그램이 테이블 업데이트 도중에 배터리를 가져 오는 사용자를 처리 할 수없는 경우 트랜잭션을 사용하십시오. –

+0

이 좋습니다. 하지만 삭제 작업이 단일 행에 대해서만 이루어지는 경우에 유용합니다. 여러 행은 어떨까요? 트랜잭션없이 삭제를 사용하면 스레드 안전성 측면에서 위험 할 수 있습니까? 내 말은,이 "db.delete (...)"스레드가 안전한가요? –

관련 문제