내 데이터베이스에 항목을 삽입하는 동안 문제가 발생했습니다. 프로그램이 4 행을 통해 실행하고 잘 삽입하는 것이 정말 이상하지만 5 행에서 충돌이 발생하고 커서 또는 데이터베이스를 닫지 않은 응용 프로그램에 대한 세 가지 보고서가 표시됩니다. 내 코드에서는 커서와 데이터베이스를 모두 닫았다가 다시 열어서 어떻게 이런 일이 발생하는지 혼란 스럽습니다. 여기에 코드가 있습니다.Android 애플리케이션이 커서 또는 데이터베이스를 닫지 않았습니다.
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case REQUEST_CODE_NEW:
if (resultCode == -1) {
Integer chapterId = data.getIntExtra("chapterId", -1);
Toast toast = Toast.makeText(this, "Selected Chapter: " + chapterId.toString(), Toast.LENGTH_LONG);
if (chapterId != -1) {
DbHelper db = new DbHelper(this);
for (int i = 0; i < questions.getTitle().size(); i++) {
db.insertQuestion(chapterId.toString(), questions.getTitle().get(i), questions.getAnswer().get(i), questions.getAr().get(i));
}
}
toast.show();
}
break;
}
}
dbhelper 클래스를 통해 데이터베이스를 생성하는 방법입니다. 여기에 내가 아무 소용이 여전히 더 잘 관리하려고 노력하지만, 수 I 클래스 수준에서 커서를 데이터베이스 도우미
public void insertQuestion(String cat_id, String title, String answer, String article) {
db.execSQL("INSERT INTO " + QUESTION_TABLE_NAME + " (title,answer,article,picture) VALUES ('" + title + "','" + answer + "','" + article + "','none')");
String id = getQuestionId(title);
db.execSQL("INSERT INTO " + REL_TABLE_NAME + " (question_id, cat_id) VALUES (" + id + "," + cat_id + ")");
}
public String getQuestionId(String title) {
String id;
cursor = this.db.rawQuery("SELECT question_id FROM " + QUESTION_TABLE_NAME + " WHERE title = '" + title + "' LIMIT 1", null);
cursor.moveToFirst();
id = cursor.getString(0);
cursor.close();
db.close();
return id;
}
입니다. 4 개의 쿼리 후에도 계속 충돌합니다.
당신이 getQuestionId에 DB를 폐쇄에서 오류가 발생 해달라고 ...? db.close는 getQuestionId()가 아닌 for 루프의 종료에서 호출해야합니다. –
충돌을 나타내는 logcat 출력을 게시하십시오. 무엇이 잘못되었는지를 나타내는 크래시의 근본 원인이 있습니다. – Femi
나는 달린 쿼리를 볼 때 문제를 발견했다고 생각합니다. 거기에 복수형 단어와 기타 등등이 있습니다. PHP 같은 것을 빠져 나올 수있는 빠른 방법이 있습니까? – Shaun