У меня возникли трудности с пониманием концепции работы баз данных SQLite в Android. Я создал класс DatabaseHelper.java, который выглядит следующим образом:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "library.db";
public static final String TITLE = "title";
public static final String MUSICTITLE = "musictitle";
public static final String AUTHOR = "author";
public static final String ARTIST = "artist";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL( "CREATE TABLE music (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, artist TEXT);");
db.execSQL( "CREATE TABLE books (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author TEXT);");
db.execSQL( "CREATE TABLE movies (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
android.util.Log.v("Constants",
"Upgrading database which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS books");
db.execSQL("DROP TABLE IF EXISTS music");
db.execSQL("DROP TABLE IF EXISTS movies");
onCreate(db);
}
}
Насколько я знаю, это работает и было проверено с помощью консоли adb.
Мой вопрос заключается в том, как запросить эту базу данных в приложении из другого действия, например, я хочу, чтобы в моем приложении запрашивалась база данных: ВЫБРАТЬ заголовок ИЗ книг; который вернет мне названия из таблицы книг, как мне подключиться к базе данных, выполнить этот запрос и сохранить все результаты в массиве?
---------------------------------- Редактировать ------------ ----------------------------
Прямо в той части, где я хочу сделать запрос, я поместил этот код:
if (category.equals("Books")){
img.setImageResource(R.drawable.book);
ArrayList<String> list = new ArrayList<String>();
dh = new DatabaseHelper(this);
SQLiteDatabase db = dh.getReadableDatabase();
Cursor cursor = db.query("books", new String[] { "title" }, null, null, null, null, "title desc");
if (cursor.moveToFirst()) {
do {
list.add(cursor.getString(1));
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
list.add("Test");
cont_array = (String[]) list.toArray();
db.close();
}
Который передает категорию вниз по сравнению с предыдущим действием. Из ответа Оливье. Этот код вызывает сбой приложения, и я понятия не имею, почему. переменная cont_array используется после этого оператора if для заполнения ListView. У кого-нибудь есть идеи, где я ошибаюсь, в LogCat нет ничего, что могло бы сказать мне, где это происходит?