2014-11-10 8 views
0

나는 안드로이드 애플 리케이션에서 일하고 있으며 때때로 SQLite 데이터베이스를 서버에서 오는 일부 데이터로 업데이트해야합니다.SQLiteDatabase.insertWithOnConflict가 예외를 throw합니다.

동일한 기본 키가있는 행이 이미 있기 때문에 삽입하려는 데이터가 충돌을 일으킬 수 있습니다. 이것이 내가 insertWithOnConflict이고 CONFLICT_IGNORE 플래그를 사용하는 이유입니다. 아이디어는 "데이터가 존재하지 않는다면 이미 저장되어 있고 무시해도된다"라는 것이다.

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.novadart.booster.android, PID: 1643 
    android.database.sqlite.SQLiteConstraintException: foreign key constraint failed (code 19) 
      at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method) 
      at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782) 
      at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788) 
      at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86) 
      at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) 

왜 예외 문서가 던져 질 안된다고 말할 때 : 충돌이 내 응용 프로그램이 예외와 충돌 볼 일이 그러나

? 버그입니까, 아니면 뭔가 빠졌습니까?

예를 들어, 내가 사용하는 경우 insert 로그에서 동일한 예외가 표시 될 수 있지만 응용 프로그램은 충돌하지 않습니다 (이 메서드는 -1을 반환합니다).

+0

http://stackoverflow.com/questions/15443913/sqlite3-foreign-key-constraint-failed이 링크를 사용하십시오. – Piyush

답변

1

문제는 삽입하는 행이 외래 키 제약 조건 (참조 된 행이 존재하지 않음)을 위반하고 있다는 것입니다. 웬일인지 나는 그것을 간과했다.

따라서 insertOnConflict의 오류가 아닙니다.

+0

@piyush 답에 감사드립니다. 문제를 해결하지 못했지만 올바른 방향으로 알려주었습니다 (나는 행을 제거하지 않았습니다). – Giordano

관련 문제