私のデータベースにアイテムを挿入する際に問題が発生しました。プログラムが4行で実行され、正常に挿入されるのは本当に奇妙ですが、5行目でクラッシュし、アプリケーションまたはカーソルの3つのレポートが閉じられませんでした。私のコードでは、カーソルとデータベースの両方を閉じて再オープンしているので、これがどう起こっているのか本当に混乱しています。ここにコードがあります。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クラスを使用してデータベースを作成することです。ここで私は無駄にまだ良い、それを管理しようとするが、ことができますので、私はクラスレベルでカーソルを置くデータベースヘルパー
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