SQLite의 query로 망설임

소개



이것은 내가 처음 안드로이드 응용 프로그램 개발에서 망설이고, 그 후 해결 된 방법을 비망록으로 철자하고 있습니다.

데이터베이스에 추가하려는 항목이 기존인지 확인하고 싶었습니다.



java에서 SQLite를 이용한 애플리케이션을 작성하는 동안 EditText에 입력된 item이 이미 데이터베이스에 등록한 경우에는 경고를 표시시켜 추가하지 않는 처리를 하려고 했지만 좀처럼 잘 할 수 없었다.

처음에 갔던 일



example.java
String item = editText.getText().toString();
Cursor c = db.query("table", new String[]{"item", "yen"}, "item = " + item, null, null, null, null);

이것은 조사한 여러 사이트 중 일부에 작성된 방법이었습니다. 실제로 시도한 곳 ...
android.database.sqlite.SQLiteException: no such column: リンゴ

같은 오류가 표시됩니다.

그건 그렇고, 칼럼은 ...



각 항목에 해당하는 '열'.

htps // 26g 등 m. 코 m/다타바세-rms

try-catch 문으로 도전



라는 것으로 컬럼을 모르고 조사하려고 하지 않았던 나는 try-catch문을 이용하여 try로 기존인지 확인. catch로 데이터베이스에 추가하면 좋을까? 라고 생각했기 때문에 실제로 코드로 해 보았다.

example.java
String item = editText.getText().toString();
try{
    Cursor c = db.query("table", new String[]{"item", "num"}, "item = " + item, null, null, null, null);
    /*既存の時の処理*/
}catch(Exception e){
    /*データベースに追加する処理*/
}

이 결과를 실행해 보면 ...


item
yen


사과
100

사과
100


같은 추가되었습니다! ! 어라~ 미안해~...
여러가지 조사한 결과, 아무래도 "item = " + item 의 작성 방법이 되지 않는 것 같습니다. (←여기서 칼럼의 의미를 깨달은 무사적면)

본래 검색 방법



example.java
Cursor c = db.query("table", new String[]{"item", "yen"}, "item = ?", new String[]{item}, null, null, null);

라고 쓰는 것이 정답인 것 같습니다. 처음 쓴 코드가 직관적으로 알고...라는 것은 놓고 쓰는 방법도 알았고 다음으로 진행하자!

... 그렇다면 여기에서 다시 한 번 주저했습니다. 그 코드가 이쪽.

example.java
Cursor c = db.query("table", new String[]{"item", "yen"}, "item = ?", new String[]{item}, null, null, null);
if(c.moveToFirst()){
    /*既存の時の処理*/
}else{
    /*データベースに追加する処理*/
}

커서를 최초의 위치로 이동할 수 있다 ⇒ 이미 존재하는 발상에 이르렀던 것이군요.
실제로 추가되어 있을지 모르겠지만, 그런 일에 관계없이 「정」이 되기 때문에 매회, 기존의 처리가 실행되어 버렸습니다.

기존인지 여부를 결정하는 방법



그렇다면 기존 여부를 판단하는 프로그램이 결국 어떻게 해결했는지,

example.java
String item = editText.getText().toString();
Cursor c = db.query("table", new String[]{"item", "yen",}, "item = ?", new String[]{item}, null, null, null);
if(c.getCount() != 0) {
    /*既存の時の処理*/
}else{
    /*データベースに追加する処理*/
}

레코드 (행)를 세는 기능을 가진 메소드가 있었기 때문에 그것을 이용하고,
· 행 수가 0이 아니면 기존 처리
· 0 행이면 데이터베이스에 추가하는 처리
그렇다면 원하는대로 프로그램을 구현할 수있었습니다.

여담
"item like ?", new String[]{"%" + item + "%"} 그러면 SQL의 lile 절을 이용하여 그 단어가 포함된 필드(요소)를 찾을 수 있습니다.

마지막으로



이번 기사는 여기까지입니다.
Android 어플리케이션은 이번이 처음의 도전이었기 때문에, 망설이는 일도 많았습니다만, 무사히 작성할 수 있어, 평상시 사용하고 있는 휴대폰에 인스톨 시킬 수 있었습니다.
모르는 것이 있으면 조사할 것. 방법을 잘 확인하고 활용하는 것.
이 두 가지를 자신의 좌우명에 추가하고 앞으로도 안드로이드의 앱 개발에 도전해 가면 좋겠습니다.
조언, 질문 등 있으면 코멘트 란에서 부탁드립니다.
끝까지 교제 해 주셔서 감사합니다.

좋은 웹페이지 즐겨찾기