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

안드로이드 데이타베이스에서 primary key 관련하여 문제가 발생합니다.(column id is not unique)

0 추천

 안드로이드 내장 DB를 코드를 활용하여 접근을 하려고 합니다.

일단 tbl_realname, tbl_nickname 은 다음과 같습니다.

 

테이블 명: tbl_realname

칼럼 구조: id(primary key)  | realname

 

테이블 명: tbl_nickname

칼럼 구조: id(primary key) | nickname

 

현재 저의 클래스 구조는

DBOpenHelper.java - SQLiteOpenHelper를 구현한 클래스로 데이터베이스 생성과 관련합니다. onCreate() 에서 테이블을 생성하는데 일단은 조인 예제인지라 에스큐엘 테이블 생성문을 두번 호출하게 되어있습니다.

@Override

public void onCreate(SQLiteDatabase db) {

String sql = "create table tbl_realname

 (id text primary key, realname  text)";

db.execSQL(sql);

Log.i("DBINFO", "table 1 created..............................");

 

String sql2 = "create table tbl_nickname

(id  text primary key,  nickname  text)";

db.execSQL(sql2);

Log.i("DBINFO", "table 1 && table2 created....................");

//테이블 두개 생성 

} 

DBHandler.java - 이 클래스에서는 helper를 이용하여 데이타 베이스를 열고 닫고 CRUD를 수행합니다.

현재 문제되는 부분은 다음과 같습니다.

 

public void insert(){

db = helper.getWritableDatabase();

 

ContentValues values = new ContentValues();

values.put("id", "1");

values.put("realname", "yoon");

db.insert(DBProp.TBL_NAME1, null, values);

Log.i("DBINFO", "table 1 data1...........................");

 

values = new ContentValues();

values.put("id", "2");

values.put("realname", "hwang");

db.insert(DBProp.TBL_NAME1, null, values);

Log.i("DBINFO", "table 1 data2...........................");

 

values = new ContentValues();

values.put("id", "1");

values.put("nickname", "babo");

db.insert(DBProp.TBL_NAME2, null, values);

Log.i("DBINFO", "table 2 data1...........................");

 

values = new ContentValues();

values.put("id", "2");

values.put("nickname", "munggae");

db.insert(DBProp.TBL_NAME2, null, values);

Log.i("DBINFO", "table 2 data2...........................");

}

Sample.java - 마지막으로 호출부입니다.

 

이렇게 수행하면 인서트 하는 부분에서 "column name id is not unique" 라고 뜨면서

임의로 집어넣어져야 하는 데이타가 안들어갑니다. 고수님들 도와주세요~~ㅠㅠ

 

PS. 중간 코드에서는 테이블명을 상수화해놨습니다.;;

 

kieth (130 포인트) 님이 2013년 4월 2일 질문

1개의 답변

0 추천
pk는 not null unique한 값이 들어가야합니다. 즉, 비어있으면 안되고 같은값이 존재하면 안됩니다

이미 같은 값을 가지는 레코드가 db에 존재하여 해당 pk로 레코드를 생성할 수 없다는 에러입니다.

pk로 id같은것을 사용하시는경우 table 구성하실때 auto increase 도 선택을 하시면
insert 하실때 해당 칼럼을 비우고 등록하면 되고 db가 자동으로 pk를 생성하게 만들 수 도있습니다.
Noizbuster (11,970 포인트) 님이 2013년 4월 2일 답변
잘 보았습니다.
감사합니다.
...