SQLite의 query로 망설임
소개
이것은 내가 처음 안드로이드 응용 프로그램 개발에서 망설이고, 그 후 해결 된 방법을 비망록으로 철자하고 있습니다.
데이터베이스에 추가하려는 항목이 기존인지 확인하고 싶었습니다.
java에서 SQLite를 이용한 애플리케이션을 작성하는 동안 EditText에 입력된 item이 이미 데이터베이스에 등록한 경우에는 경고를 표시시켜 추가하지 않는 처리를 하려고 했지만 좀처럼 잘 할 수 없었다.
처음에 갔던 일
example.javaString 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.javaString 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.javaCursor c = db.query("table", new String[]{"item", "yen"}, "item = ?", new String[]{item}, null, null, null);
라고 쓰는 것이 정답인 것 같습니다. 처음 쓴 코드가 직관적으로 알고...라는 것은 놓고 쓰는 방법도 알았고 다음으로 진행하자!
... 그렇다면 여기에서 다시 한 번 주저했습니다. 그 코드가 이쪽.
example.javaCursor c = db.query("table", new String[]{"item", "yen"}, "item = ?", new String[]{item}, null, null, null);
if(c.moveToFirst()){
/*既存の時の処理*/
}else{
/*データベースに追加する処理*/
}
커서를 최초의 위치로 이동할 수 있다 ⇒ 이미 존재하는 발상에 이르렀던 것이군요.
실제로 추가되어 있을지 모르겠지만, 그런 일에 관계없이 「정」이 되기 때문에 매회, 기존의 처리가 실행되어 버렸습니다.
기존인지 여부를 결정하는 방법
그렇다면 기존 여부를 판단하는 프로그램이 결국 어떻게 해결했는지,
example.javaString 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 어플리케이션은 이번이 처음의 도전이었기 때문에, 망설이는 일도 많았습니다만, 무사히 작성할 수 있어, 평상시 사용하고 있는 휴대폰에 인스톨 시킬 수 있었습니다.
모르는 것이 있으면 조사할 것. 방법을 잘 확인하고 활용하는 것.
이 두 가지를 자신의 좌우명에 추가하고 앞으로도 안드로이드의 앱 개발에 도전해 가면 좋겠습니다.
조언, 질문 등 있으면 코멘트 란에서 부탁드립니다.
끝까지 교제 해 주셔서 감사합니다.
Reference
이 문제에 관하여(SQLite의 query로 망설임), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/AlexF19/items/8e889db72139aba3f3fa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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 어플리케이션은 이번이 처음의 도전이었기 때문에, 망설이는 일도 많았습니다만, 무사히 작성할 수 있어, 평상시 사용하고 있는 휴대폰에 인스톨 시킬 수 있었습니다.
모르는 것이 있으면 조사할 것. 방법을 잘 확인하고 활용하는 것.
이 두 가지를 자신의 좌우명에 추가하고 앞으로도 안드로이드의 앱 개발에 도전해 가면 좋겠습니다.
조언, 질문 등 있으면 코멘트 란에서 부탁드립니다.
끝까지 교제 해 주셔서 감사합니다.
Reference
이 문제에 관하여(SQLite의 query로 망설임), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/AlexF19/items/8e889db72139aba3f3fa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(SQLite의 query로 망설임), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AlexF19/items/8e889db72139aba3f3fa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)