2012-01-20 4 views
-1

나는 sqlite 데이터베이스에서 사용자로부터 정보를 얻고 있습니다. 그러나 이미 데이터베이스에있는 동일한 레코드를 삽입하면 다시 추가됩니다. 어떻게 sqlite에서 레코드 중복을 막을 수 있습니까? 나는 이것을 안드로이드에서 개발 중이다. 휴대 전화 번호를 기본 키로 사용하고 있습니다. 여전히 데이터베이스에 레코드를 추가합니다. 적절한 해결책을 제안하십시오. 고맙습니다.안드로이드 애플 리케이션과 sqlite에서 데이터 중복

답변

0

테이블을 만들 때 전화 번호를 기본 키로 설정했는지 확인하십시오. 예를 들어

:

String query = "CREATE TABLE IF NOT EXISTS PhoneBook ("+ 
"TelNum VARCHAR(100) PRIMARY KEY NOT NULL,"+ 
"Address TEXT);"; 

db.execSQL(query); 

하고 경우에 당신은 다음 데이터베이스

db.execSQL("PRAGMA foreign_keys = ON;"); //enforcing FK 
0

사용 키워드 INTO 교체에 아무것도하기 전에 다음 메소드를 호출하여 테이블에 정의 된 외래 키를 적용하려면 :

REPLACE INTO my_table (pk_id, col1) VALUES (5, '123'); 

이렇게하면 기본 키가 자동으로 식별되어 일치하는 항목을 찾습니다. 삽입 행을 업데이트하고, 아무것도 발견되지 않으면 새로운 행을 삽입하십시오.

2

응용 프로그램 사용자가 데이터베이스의이 행에 추가 한 사용자 지정 데이터를 덮어 씁니다 (다른 SQL 데이터베이스에서는 UPSERT만큼 고급 수준이 아니기 때문에 REPLACE 또는 INSERT OR REPLACE의 제한 사항을 알고 있어야합니다).

이전 게시물에서 언급했듯이 기본 키가 무엇인지 식별하고이 정보를 사용하여 이전 데이터를 업데이트하거나 이전 데이터를 삽입하기 전에 이전 행을 제거해야합니다.

이것이 가능하지 않은 경우 삽입을 실행하기 전에 my_table 또는 DROP my_table을 항상 삭제하여 중복이 없도록 할 수 있습니다. 이렇게하면 (더 좋든 나쁘 든) 새로운 가져 오기에서 누락 된 데이터가 앱에 누적되어 있지 않은지 확인합니다.

관련 문제