2012-03-29 4 views
3

유용한 문서를 여러 사이트에서 검토 한 결과 비어 있습니다. 공식 사이트의 흐름도 그리스어 일 수도 있고이 사이트의 다른 관련 게시물에서 시도한 예를 통해 오류가 발생할 수도 있습니다. 나는 데이터베이스에 사용자 입력을 배치하는 간단한 응용 프로그램을 작성하고 있지만은 의 2 개 열 조합이 필요합니다. 내가 본 것으로부터 UNIQUE 또는 PRIMARY KEY로 수행 할 수 있습니다. 또한 입력을 잘못했음을 사용자에게 알리기 위해 오류를 캡처하는 방법이 필요합니다.. 나는 자바 측에서 이것을 쉽게 할 수 있다는 것을 알고있다. 그러나 나는 제안 된 모든 삽입물에 대해 테이블을 반복하지 않는 것을 선호한다.UNIQUE 열 조합을 사용하는 SQLite 테이블 만들기

db.execSQL("CREATE TABLE inventory (category TEXT, itemNum TEXT, quantity INTEGER, price REAL, image INTEGER, UNIQUE(category, itemNum) ON CONFLICT FAIL;"); 

내가 UNIQUE 추가 될 때까지 제대로 구성된 테이블 ... 던졌다

: ERROR/SQLiteOpenHelper (1037) : android.database.sqlite

내가 지금까지 무엇을 가지고 .SQLiteException : 근처 ";"구문 오류 : FAIL CONFLICT에서 고유 UNQ TABLE 인벤토리 (카테고리 TEXT, itemNum이 텍스트 량 INTEGER, 가격 REAL 화상 INTEGER, CONSTRAINT (카테고리 itemNum이)를 만들고;

EDIT :

... 채우기 콘텐츠 입력 값이 사용자 입력 인입니다.

try{ 
db.getWritableDatabase().insert(DatabaseHelper.TABLE_NAME, DatabaseHelper.CATEGORY, values); 
fillItemNumbers(); // Updates screen  
} 
catch(SQLiteConstraintException e) 
{ 
Toast 
.makeText(this, "User error",Toast.LENGTH_LONG) 
.show();    
} 

답변

2

괄호가 맞지 않았습니다. FAIL 뒤에 또 다른 )이 있어야합니다.

일단 정렬하면 제약 조건을 위반했을 때 예외가 발생합니다.

try { 
    // insert new data 
} catch (SQLiteConstraintException e) { 
    Toast.makeText(context, 
        "The combination of A and B must be unique", 
        Toast.LENGTH_LONG).show(); 
} 
+0

Facepalm! 이제 프로그래머의 카드를 반환하고 조용히 퇴각하여 구석에 쑤셔 넣습니다. – AnthonyW

+0

두 번째 질문에 대한 의견이 있으십니까? 나는 또한 그들의 입력이 잘못되었음을 사용자에게 건배하기 위해 오류를 캡처하는 방법이 필요하다. – AnthonyW

+0

확실히, 내 대답에 추가. –