Статьи

Освоение хранения и поиска базы данных в Android

Данные всегда были самой важной частью любого мобильного приложения. Разработчики должны хранить значительные объемы данных организованным образом, чтобы их приложения были по-настоящему ценными для их пользователей. В Android вы можете хранить свои данные разными способами, как в активной памяти, так и в записанных файлах. Многие приложения также имеют удаленный веб-сервис, который предоставляет данные для рассматриваемого приложения. Android также поддерживает хранение данных в локальной базе данных, а операционная система обеспечивает хорошую инфраструктуру для хранения и извлечения данных. В большинстве случаев наиболее простой и понятный способ получения и сохранения пользовательских данных — через базы данных SQLite.

SQLite

SQLite — это технология реляционных баз данных, которая используется чаще всего, когда разработчику требуется встроенная база данных в небольшой системе. SQLite включен в систему Android и может быть легко использован в вашем приложении для Android. Для получения более подробной информации о SQLite, вы можете посетить http://www.sqlite.org и http://en.wikipedia.org/wiki/SQLite

Создание базы данных в Android

Чтобы записать данные в базу данных, нам нужно сначала создать нашу базу данных. Чтобы создать базу данных в SQLite в Android, необходимо создать подкласс класса SQLiteOpenHelper. Этот класс предоставляет функциональность для создания базы данных и вызывает функцию, которая может быть переопределена производным классом. Конструктор SQLiteOpenHelper принимает четыре аргумента, которые

  1. Контекст — это контекст, который будет использоваться для создания базы данных. (Здесь вы можете передать объект Activity.)
  2. Имя — имя нового файла базы данных.
  3. ФабрикаФабрика курсора (обычно вы можете передать это как ноль)
  4. Версия — версия базы данных. Этот номер используется для определения, есть ли обновление или понижение в базе данных.

Ниже мы создали класс (MyDatabaseHelper), который будет производным от SQLiteOpenHelper:

public class MyDatabaseHelper extends SQLiteOpenHelper{

private static final String DATABASE_NAME="MyFriendsDatabase";

public MyDatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, 1);

}

@Override

public void onCreate(SQLiteDatabase database) {

database.execSQL("CREATE TABLE friends (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, phonenumber INTEGER);");

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("DROP TABLE IF EXISTS friends");

onCreate(db);

}

}

В конструкторе выше мы передаем имя базы данных, которую мы хотим создать, под названием «MyFriendsDatabase». Мы также переопределяем следующие методы:

OnCreate

Этот метод вызывается при создании базы данных. Передается ссылка на SQLiteDatabase, которую мы можем использовать для выполнения различных операций с базой данных. В этом методе мы используем функцию execSQL для выполнения запроса SQL, чтобы создать таблицу с именем friends, которая состоит из трех столбцов. Первый столбец (_id) необходим для создания уникального идентификатора для каждого столбца. Это необходимо в случае, если вы собираетесь использовать классы, такие как SimpleCursorAdapter (подробнее об этом позже в статье). Второй и третий столбцы (имя и номер телефона) — это поля данных, которые мы на самом деле хотим сохранить.

onUpgrade

Этот метод вызывается всякий раз, когда база данных обновляется. В этом методе передаются SQLiteDatabase и номер oldVersion и номер newVersion.

В этой функции мы просто удаляем таблицу «друзей», если она существует, и создаем новую, но может быть более сложная логика, основанная на таблицах, которые вы создаете в базе данных, и на том, что вы хотели бы произойти при обновлении.

Добавление значений в базу данных

Как только база данных создана, теперь давайте рассмотрим, как мы можем добавить значения в базу данных. Мы собираемся использовать функцию вставки в классе SQLiteDatabase. Функция вставки принимает три аргумента: имя таблицы, в которую нужно вставить значения, имя одного из столбцов таблицы и ссылку на ContentValues.

В классе MyDatabaseHelper ниже мы напишем функцию для вставки значений в базу данных.

 public void addFriend(String name,int phonenumber)

{

ContentValues values=new ContentValues(2);

values.put("name", name);

values.put("phonenumber", phonenumber);

getWritableDatabase().insert("friends", "name", values);

}

В этой функции мы принимаем входные аргументы в качестве имени и номера телефона . Затем мы создаем новый объект ContentValues, мы помещаем значения для имени и номера телефона в этот новый объект. Как только мы это сделаем, мы получим ссылку на SQLiteDatabase для записи, используя функцию getWritableDatabase, которая является членом SQLiteOpenHelper. Получив ссылку на базу данных SQLiteDatabase, мы вызываем функцию вставки , которая принимает аргументы в качестве имени таблицы, одного из столбцов таблицы и ContentValues. Это введет новую строку в таблицу базы данных ваших друзей.

Если я хочу использовать MyDatabaseHelper для создания базы данных и добавления некоторых значений данных, код будет следующим:

 public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

databaseHelper = new MyDatabaseHelper(this);

databaseHelper.addFriend("Abbas", 987);

databaseHelper.addFriend("John", 9877);

databaseHelper.addFriend("Michael", 8334);

}

Здесь в нашей деятельности мы создаем новый объект (MyDatabaseHelper) и затем добавляем некоторые значения в таблицу, вызывая функцию addFriend .

Выполнение необработанных запросов к базе данных

После того, как мы добавили данные в базу данных, теперь мы увидим, как данные могут быть получены. Чтобы получить данные, есть два возможных метода.

Выполнение необработанного SQL-запроса

Мы можем напрямую запустить SQL-запрос, такой как SELECT, чтобы извлечь записи из базы данных.

Для запуска необработанного запроса SQL у вас есть функция rawQuery, которая принимает инструкцию SQL в качестве строки в качестве первого параметра, а аргументы выбора — в качестве второго параметра. Итак, если нам нужно написать функцию в MyDatabaseHelper для извлечения всех записей из друзей таблицы, это будет выглядеть следующим образом:

 public Cursor getFriends()

{

Cursor cursor = getReadableDatabase().rawQuery("select * from friends", null);

return cursor;

}

Запускать запросы к базе данных

Мы также можем выполнять запросы к базе данных, используя функцию query в SQLiteDatabase. Функция запроса позволяет выполнять запросы к одной таблице, а также указывать некоторые критерии выбора и порядка. Функция запроса принимает несколько аргументов: имя таблицы, имя столбцов таблицы для извлечения, критерии выбора, аргументы для критериев выбора, предложение group by, предложение has, предложение order by и предел.

Если нам нужно написать ту же функцию выше, чтобы получить всех друзей, используя запрос , это будет выглядеть следующим образом:

 public Cursor getFriends()

{

Cursor cursor = getReadableDatabase().query("friends",

new String[] { "_id", "name", "phonenumber"},

null, null, null, null, null);

return cursor;

}

Курсор базы данных

Результат запроса возвращается в виде объекта Cursor , который в основном помогает за счет эффективного кэширования результата запроса и предоставления функций для доступа к данным.

Если мы хотим получить данные всех друзей из Cursor, возвращаемые функцией getFriends, мы напишем следующий код:

 Cursor AllFriends = databaseHelper.getFriends();

AllFriends.moveToFirst();

while (!AllFriends.isAfterLast()) {

String Name = AllFriends.getString(1);

int number = AllFriends.getInt(2);

AllFriends.moveToNext();

}

Курсор имеет такие функции, как moveToFirst , который перемещает курсор к первой записи, moveToNext , который перемещает курсор к следующей записи, и isAfterLast , который проверяет, переместился ли курсор в последнюю запись.

У курсора также есть функции, такие как getInt , getString и т. Д., Которые принимают индекс столбца и возвращают значение.

Удаление значений из базы данных

Чтобы удалить значения из базы данных, вы можете либо выполнить необработанный запрос, либо использовать функцию удаления в SQLiteDatabase. Функция удаления принимает три аргумента: имя таблицы, предложение where и аргументы предложения where. Функция удаления всех значений из базы данных выглядит следующим образом:

 public void deleteAll()

{

getWritableDatabase().delete("friends", null, null);

}

Использование курсорного адаптера для отображения значений данных.

Android предоставляет нам адаптеры Cursor, которые позволяют нам прикреплять курсор к ListView. Класс SimpleCursorAdapter является одним из этих адаптеров, и он довольно полезен. Если мы хотим показать список друзей в виде списка, код будет следующим:

 Cursor AllFriends = databaseHelper.getFriends();

String[] from = { "name", "phonenumber" };

int[] to = { android.R.id.text1, android.R.id.text2 };

ListAdapter adapter=new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,

AllFriends

, from,

to);

ListView myList=(ListView)findViewById(android.R.id.list);

myList.setAdapter(adapter);

Как только мы это сделаем, список друзей появится на устройстве Android, как показано ниже.

Вывод

Данные являются наиболее важной частью современных конкурентных приложений. Хорошо построенное приложение должно эффективно и легко хранить и извлекать данные, чтобы оно могло бесперебойно функционировать и радовать пользователей. Android предоставляет несколько форм хорошей поддержки для хранения данных в базах данных для ваших приложений Android. Он предоставляет все функциональные возможности для создания и обновления баз данных SQLite и таблиц баз данных. Убедитесь в том, чтобы максимально использовать его при разработке вашего следующего приложения для Android!