База данных SQLite в android и java

Мне сложно понять, как работают базы данных 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.

Мой вопрос заключается в том, как я могу запросить эту базу данных в приложении из другого действия, например, я хочу, чтобы в моем приложении запрашивал базу данных: SELECT title FROM books; Который вернет мне заголовки из таблицы книг, как мне перейти на подключение к базе данных, запуск этого запроса, а затем сохранение всех результатов в массив?

———————————-Редактировать————— ————————-

Так что в той части, где я хочу запросить, я разместил этот код:

 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 нет ничего, чтобы сказать мне, где он не работает?

Внутри вашей деятельности сделайте следующее:

 public class DBAct extends Activity { private DataHelper dh; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //init your activity here //eg setContentView(R.layout.main); dh = new DataHelper(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(0)); } while (cursor.moveToNext()); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } db.close(); } } 

Чтобы читать и записывать в базу данных, вам нужно сначала захватить экземпляр объекта SQLiteDatabase в одном из ваших Activity s. Используя ваш класс DatabaseHelper , вы можете сделать это, вызвав databaseHelper.getReadableDatabase() или databaseHelper.getWritableDatabase() зависимости от того, какое действие вам нужно предпринять (читать / писать).

После того, как у вас есть экземпляр SQLiteDatabase вы можете использовать его различные вспомогательные методы для выполнения операций CRUD. Например, чтобы запустить запрос SELECT title FROM books , вы можете использовать один из различных методов query() . Существуют также доступные функции insert() , update() и delete() . Эти методы иногда возвращают Cursor , который затем можно использовать в таких объектах, как ListView чтобы пересечь результирующий набор из базы данных. Я бы порекомендовал вам использовать результаты Cursor или наложения в массив, если это возможно, просто потому, что есть приличное количество методов и объектов, которые хорошо сочетаются с курсорами.

Примечание. Обязательно закройте любой экземпляр SQLiteDatabase после того, как вы закончите чтение / запись, чтобы избежать каких-либо проблем с утечками ресурсов.

Если вам нужна дополнительная информация, я рекомендую прочитать спецификацию каждого класса в документации по API .

Проверьте мой пост на SQLite http://android-pro.blogspot.com/2010/10/using-sqlite-database-with-android.html

Есть пример приложения, вы можете downlaod его и проверить на вещи, которые вы хотите