Sqlite в Android Studio: база данных

15 Мая 2019

Статья в доступной для восприятия форме рассказывает о практическом применении SQLite Android Studio. В статье описаны основные преимущества программной среды разработки, в краткой форме рассмотрен структурный состав методов и классов.

Операционная система Android с каждым годом завоевывает мир программистов. Вопросом о том, что такое Android Studio, задаются как начинающие, так и опытные разработчики программного обеспечения, знакомые с инструментарием среды управления базами данных SQlite Android studio.

sqlite android studio

Запускаем SQLite на эмуляторе

Эмулятор Android – один из главных инструментов современного разработчика. Он дает возможность создавать и тестировать работу исходного кода и таблиц в SQl Android Studio без задействования штатных мобильных устройств.

Перед первым запуском база данных в Андроид Студио требует обновления SDK Tools до крайней на текущий момент версии.

С четвертой версии Android и выше в эмуляторе появилась возможность визуальной навигации по панели настроек. А Android Studio база данных может быть расположена на произвольном логическом разделе дискового пространства.

android studio база данных

Панель навигации может быть не видна при работе на устройствах с малым разрешением экрана. Чтобы устранить недостаток и вывести панель на экран, требуется активировать пиктограмму «Display a skin with hardware controls».

В штатной командной строке операционной системы компьютера запустить на исполнение программу adb.exe. После начала работы софта необходимо исполнить запуск программной оболочки Shell.

Для пользователей альтернативных операционных систем может понадобиться ввод команды «C:\Program Files\Android\android-sdk\platform-tools]adb -e shell».

Пиктограмма решетки «#» означает приглашение системы к вводу дополнительных команд.

база данных в андроид студио

Далее необходимо определить место, где будет непосредственно храниться информация. Например, если исходный пакет с наименованием «su.aivanushkadur.sample», то полный путь к размещенной базе данных будет выглядеть как «data/data/su.aivanushkadur.sample/databases».

Последней командой для запуска базы данных на эмуляторе будет «cd data/data/su. aivanushkadur.sample/databases/ls/user_db».

База данных корректно запущена на эмуляторе мобильного устройства выбранного форм-фактора.

Классы для работы с SQLite

Начиная с конца 2017 года, прямая работа с приложением считается несколько нерациональным подходом к структуре таблиц.

Суть управления базой сводится к выполнению ряда условий:

  • создание самой базы данных и запуск на устройстве или эмуляторе;
  • набор таблицы команд;
  • разработка интерфейсного модуля для работы с данными, модуль «insert»;
  • выполнение интерфейсного модуля управления запросами;
  • завершение работы с созданной базой данных.
sql android studio

Класс ContentValues

Класс ContentValues отвечает за работу с таблицами базы данных и добавление в них вновь созданных строк.

Каждый созданный объект в классе «ContentValues» – это одна строка в виде массива, содержащего данные о столбцах таблицы и информационных блоках, соответствующих столбцам.

Курсоры

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

Классы типа «Cursor» работают со строками или позициями в текущем времени по отношению к общему набору запрашиваемых данных.

андроид студио база данных sqlite

Класс SQLite Open Helper: создание базы данных

«SQLite Open Helper» – первичный класс при работе с данными в среде операционной системы Android. Главная функция класса состоит в предоставлении возможности пользователю создавать, удалять и обновлять уже созданные базы.

В составе базового класса включены несколько методов абстрактного вхождения:

  • «onCreate()» - включается в работу при первоначальном применении базы;
  • «onUpgrade()» - задействуется при изменениях, обновлениях или модифицировании существующей базы данных.

Кроме пары главных методов, существует ряд вспомогательных, использующихся по мере необходимости:

  • «onDowngrade(SQLiteDatabase, int, int)»;
  • «onOpen(SQLiteDatabase)»;
  • «get Readable Database()»;
  • «get Writable Database()».

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

android studio локальная база данных

Аналогичным образом класс влияет на создание стоковых столбцов, адресация которых учитывается при клиентском запросе к базе данных.

К примеру, на основе использования метода «onCreate()» возможно отработать запрос на ликвидацию существующей таблицы. В дальнейшем вновь самостоятельно создать структуру, используя базовый функционал класса «onCreate()». При этом параметры метода анализируют и запоминают две версии таблиц: удаленную и вновь созданную, что упрощает дальнейшую работу по запросам с базой.

SQLiteDatabase

Класс «SQLiteDatabase» – основа управления данными интерфейса. Базовый набор класса «SQLiteDatabase» штатно включает в себя методы:

  • query();
  • insert();
  • delete();
  • update().

Рабочий функционал методов, входящих в состав класса, ограничен базовым набором управления. Доступно только создание, удаление, внесение изменений и чтение информационной составляющей. Отдельно стоит упомянуть о решении, позволяющем подстраивать код любой структуры на исполнение в среде языка SQL.

android studio создание базы данных

Метод query()

Метод «query()» в большинстве случаев используется для выполнения операций чтения данных из общей базы.

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

  •  «Table» - информативное имя табличных данных, выдаваемое по запросу;
  •  «String[] columnNames» - общий массив полей возвращаемых по запросу;
  •  «String whereClause» - вспомогательный параметр, выдающий определенные выражения (в зависимости от типа команд) и выражения «WHERE»;
  •  «String[] selectionArgs» - предоставляет аргументы функции таблицы по командному запросу;
  •  «String[] groupBy» - параметр фильтрации значения по принципу группового формирования;
  •  «String[] having» - аналогичный предыдущему фильтр, группирующий данные по избирательному принципу;
  •  «String[] orderBy» - вспомогательный параметр при запросе, который отличается от команды «null», выдает выражение «ORDER».
База данных Sqlite в Android Studio

Метод rawQuery()

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

Cursor cursor = get ReadableDatabase().
        rawQuery(“select * from todo where _id = ?”, new String [] { id })

Метод insert()

Метод имеет перспективу частого применения, необходим при вставке данных в таблицы SQLite, в своем составе имеет три параметра:

  •  «table» - задает переменную имени для будущей таблицы и вставок;
  •  «nullColumnHack» - параметр, контролирующий отсутствие в базе SQLite полностью или частично пустых строк, при выявлении задается команда «null»;
  •  «values» - параметр отображения данных класса Map, ключи, передаваемые данным карты, являются первичными значениями таблицы параметров.

Метод update()

Суть работы метода исходит из его названия – обновление существующих и вновь созданных (загруженных) данных. Для корректной работы необходимо задать методу параметры таблицы базы данных, требующей обновления.

//Определите содержимое обновленной строки.

ContentValues updatedValues = new ContentValues();

//Назначьте значения для каждой строки.

newValues.put (COLUMN_NAME, newValue);
[...Повторите для каждого столбца...]
String where = KEY_ID +”=”+ rowId;

//Обновите строку с указанным индексом, используя новые значения.
myDatabase.update(DATABASE_TABLE, newValues, where, null);

Метод delete()

Работает по принципу аналогичному методу «update()», за исключением конечного результата выполнения. При заявленных параметрах местонахождения таблицы базы данных, «delete» удаляет все информационные составляющие.

Требует обязательного отражения оператора «WHERE», после выполнения которого на экране визуализируются удаленные строки.

myDatabase.delete(DATABASE_TABLE,
        “NAME = ?”,
        New String [] {“Murzik”});

Метод open Or Create Database: Открытие и создание баз данных без использования SQLite Open Helper

Метод дает возможность с легкостью редактировать созданные базы данных и создавать необходимые, используя информативный объект «Context».

Доступность базы данных при использовании метода включает буквально пару шагов:

  • для начала работы и создание новой базы данных пользователем вызывается метод  «open Or Create Database()»;
  • в полученной базе данных вводится вызов параметра «execSQL()» (для установки адекватной системы взаимосвязи двух параметров).
База данных Sqlite в Android Studio

Контент-провайдеры

Штатные контент-провайдеры предоставляют пользователю стандартный для этого класса набор функциональных операций. К таким функциям относится: формирование запросов на чтение, исполнение, удаление или исключительное создание синтаксиса.

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

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

Вставляем картинки в базу

База данных SQLite не имеет прямого функционала взаимодействия с форматами изображений, из чего вытекает единственный метод решения проблемы – двухсторонняя конвертация изображения в массив байтового уровня.

Обратная конвертация массива в формат изображения при извлечении картинки выполняется реверсивно.

package ru.alexKlimov.test;

import java.io.ByteArrayOutputStream;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;

public class Utilities {

    // convert from bitmap to byte array
    public static byte [] getBytes (Bitmap bitmap) {
        ByteArrayQutputStream stream = new ByteArrayQutputStream();
        bitmap.compress (CompressFormat.PNG, O, stream);
        return stream.toByteArray();
    }

    // convert from byte array to bitmap 
    public static Bitmap getImage(byte[] image) {
        return BitmapFactory.decodeByteArray(image, O, image.lenght);
    }
}

Тематическое видео с наглядным пояснением работы доступно по ссылке.

Автор статьи
Нет комментариев

Авторизоваться или зарегистрироваться для комментирования.