Это учебник следующего уровня, где я смешиваю две концепции — концепцию ListView, которая подробно объясняется в учебнике ListView, и концепцию SQLiteDB в собственном учебнике.
Здесь я собираюсь сделать запрос к базе данных с помощью API SQLiteDatabase . Результаты, которые я получаю, находятся в объекте Cursor, который я повторяю и создаю ArrayList, который передается в ListView . Давайте посмотрим, какие шаги выполняются в этом упражнении:
В методе onCreate (…) у меня есть 2 метода, соответствующих двум шагам, описанным выше:
openAndQueryDatabase();
displayResultList();
Давайте посмотрим, что делает каждый из них.
Вот первый шаг:
private void openAndQueryDatabase() {
try {
DBHelper dbHelper = new DBHelper(this.getApplicationContext());
newDB = dbHelper.getWritableDatabase();
Cursor c = newDB.rawQuery("SELECT FirstName, Age FROM " +
tableName +
" where Age > 10 LIMIT 4", null);
if (c != null ) {
if (c.moveToFirst()) {
do {
String firstName = c.getString(c.getColumnIndex("FirstName"));
int age = c.getInt(c.getColumnIndex("Age"));
results.add("Name: " + firstName + ",Age: " + age);
}while (c.moveToNext());
}
}
} catch (SQLiteException se ) {
Log.e(getClass().getSimpleName(), "Could not create or Open the database");
} finally {
if (newDB != null)
newDB.execSQL("DELETE FROM " + tableName);
newDB.close();
}
}
Теперь DBHelper — это класс, который я написал, расширяющий класс SQLiteOpenHelper . Все, что он делает, — это создает базу данных с именем «sample», создает в ней таблицу и вставляет значения в таблицу. Это происходит, если база данных еще не существует. Имя таблицы — «Ресурс», а столбцы в таблице: Фамилия, Имя, Страна, Возраст.
Код для этого примера можно скачать здесь, и вы также можете посмотреть код DBHelper (который я не хочу здесь развивать )
Итак, из класса DBHelper мы получаем открытую базу данных, которую мы называем newDB . Используя этот дескриптор, мы запрашиваем у таблицы значения. Для простоты, при получении значений я жестко закодировал имена столбцов, что не обязательно должно быть так. Поэтому я запускаю rawQuery и получаю результаты в Cursor .
Затем я перебираю Cursor и заполняю результаты в ArrayList of Strings « result ». В блоке finally я не только закрываю базу данных, но и перед этим удаляю все записи, вставленные в базу данных классом DBHelper просто для очистки ,
Далее, как мне отобразить результаты в ListView . Если вы знаете ListView — как это работает, это довольно просто. В противном случае вы можете посмотреть учебник ListView . Вот метод:
private void displayResultList() {
TextView tView = new TextView(this);
tView.setText("This data is retrieved from the database and only 4 " +
"of the results are displayed");
getListView().addHeaderView(tView);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, results));
getListView().setTextFilterEnabled(true);
}
Единственный дополнительный бит, который я здесь сделал, — это добавление HeaderView (использующего концепцию пользовательского интерфейса программирования, описанную в другом учебнике ).
Я написал этот урок на основе некоторых запросов в моем блоге. Надеюсь это поможет.