Эксклюзивная серия съедобных руководств | Немного вкуса SQLite на Android

SQLite
Эксклюзивная серия съедобных руководств | Немного вкуса SQLite на Android

Всем привет, первая статья технического демонтажника на этой неделе представляет вам нашу новую тему "Эксклюзивная серия съедобных руководств". В качестве первой серии статей на новую тему поделюсь с вами в этот раз.AndroidконецSQLiteиз"Съедобные рекомендации". Причина взятияSQLiteКак вступительная статья серии, это также из-за недавнего воздействия обратногоAndroidконецSQLiteЯ ознакомился с большим количеством информации о работе базы данных, и я также хочу сделать резюме этого исследования, поэтому я разделю его на три статьи, чтобы рассказать вам об этом обратном.AndroidконецSQLiteОпыт БД, первой на которую приходится основная тяжесть, это "Эксклюзивная серия съедобных руководств|AndroidконецSQLiteВкус этого "

Исходный код проекта, использованного в этой статье, находится в моем личномGithubВверху: https://github.com/lateautumn4lin/TechPaoding/tree/main/practice_demo/Cattle

1 Знакомство с SQLite

1.1 Определение SQLite

SQLiteЭто легкая реляционная база данных, почему она легкая? В основном из-за того, что он требует очень мало ресурсов, обычно достаточно всего нескольких сотен КБ памяти, а также из-за того, что его структура достаточно проста, а скорость работы очень высока, он особенно подходит для использования на мобильных устройствах.

1.2 Возможности SQLite

  • легкий использоватьSQLiteВам нужно только принести динамическую библиотеку (т.NDKразвитиеSOбиблиотека), вы можете пользоваться всеми ее функциями, а размер динамической библиотеки должен быть небольшим, поэтому можно сказать, что она «полезна и безвредна» для использования на мобильных терминалах.
  • независимостьSQLiteЯдру базы данных не нужно полагаться ни на стороннее программное обеспечение, ни на так называемую «установку».
  • ИзоляцияSQLiteВся информация в базе данных (например, таблицы, представления, триггеры и т. д.) содержится в папке, что удобно для управления и обслуживания.Специфика формы заключается в том, что каждая база данных представляет собойdbФайл, который эквивалентен библиотеке и библиотеке, ранее были изолированы друг от друга.
  • КроссплатформенностьSQLiteВ настоящее время поддерживается большинство операционных систем, даже компьютерные операционные системы не могут работать на многих системах мобильных телефонов, таких как:AndroidиIOS.
  • Многоязычный интерфейсSQLiteБаза данных поддерживает программный интерфейс полиглота (вAndroidТерминальные вызовы обычно используютсяJDKилиNDKразвивать).
  • безопасностьSQLiteБаза данных реализует независимую обработку транзакций с помощью эксклюзивных и общих блокировок на уровне базы данных. Это означает, что несколько процессов могут одновременно считывать данные из одной и той же базы данных, но только один из них может записывать данные (вовлеченные проблемы параллелизма обрабатываются аналогично другой реляционной базе данных —MySQL).
  • Поля со слабой типизацией Данные в одном столбце могут быть разных типов (евангелие свободы кодирования, кошмар кодирования обсессивно-компульсивного расстройства)

1.3 Типы данных SQLite

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

тип значение
NULL значение равно NULL
INTEGER Значение представляет собой целое число со знаком, хранящееся в 1, 2, 3, 4, 6 или 8 байтах в зависимости от размера значения.
REAL Значение - это значение с плавающей точкой, хранятся как 8-байтовый номер плавающей запятой IEEE
TEXT Значение представляет собой текстовую строку, сохраненную с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE).
BLOB Значение представляет собой блок данных, хранящийся точно в соответствии с его вводом.

Вышеизложенное касаетсяSQLiteБазовые знания оWIKI: https://this.Wikipedia.org/wiki/SQLite

1.4 Установка SQLite

оSQLiteустановка, здесь мы цитируемCentOS7Например, самый простой способ — это, конечно, «ленивая установка в один клик».

 sudo yum install sqlite-devel

После установки это может быть похоже на обычную базу данных, вы можете попробовать «добавить, удалить, изменить и проверить», например следующее

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

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

2 средства отладки для SQLite

Мы упоминали вышеSQLiteНа самом деле это реляционная база данных, так что подумайте оMySQLесли,SQLiteУ него также есть свой специальный инструмент визуализации или инструмент отладки, потому что позже мы будем использовать этот инструмент для просмотра в реальном времени.Appхранилище данных.

2.1 Прямая отладка командной строки

Способ отладки командной строки такой же, как мы сказали выше.CentOS7Способ работы с базой данных в основном аналогичен, потому чтоAndroidсама также являетсяLinuxСистема и связанные с ней команды также одинаковы. Если не сложно, можно напрямуюadb shellВойдите в систему мобильного телефона для работы.

2.2 Инструменты SQLiteStudio

По сравнению с командной строкой, я думаю, что больше людей выберет визуальные инструменты для работы.Здесь я рекомендую инструменты, которые я использую в настоящее время.SQLiteStudio, На самом деле, я запутался во многих инструментах при выборе инструментов, но другие инструменты не могут быть подключены в режиме реального времениAndroidМашинная отладка немного хуже с точки зрения безопасности шифрования, поэтому в конце я выбрал именно ее.SQLiteStudio.

Последняя версияSQLiteStudioдаSQLiteStudio3.2, адрес: https://sqlitestudio.pl/, Вы можете перейти на официальный сайт для загрузки, это также проект с открытым исходным кодом, если у вас есть какие-либо вопросы, вы можете перейти наGithubПобеспокоить этого босса.

Общий интерфейс такойПродемонстрируйте процесс добавления новой базы данных, как обычно

Database->Add a Database-> Откройте выбранныйфайл базы данныхВот и все.

3 Введение в базовые классы SQLite

Мы сказали вышеSQLiteИнструменты определения и отладки, давайте поговорим об этом формальноSQLiteДля этой статьи мы пока не будем углубляться в исходный код, а затем я опубликую анализ исходного кода отдельно. Как пользоватьсяSQLiteПеред базой данных необходимо представитьSQLiteДва важных класса:SQLiteDatabaseиSQLiteOpenHelper,ЭтоSQLiteбаза данныхAPIДва самых основных класса в .

3.1 SQLiteDatabase

существуетAndroidавтономныйSQLiteбиблиотека,SQLiteВсе операции происходят изSQLiteDatabase, другой классSQLiteOpenHelperОн также является производным от этого класса для создания базы данных и управления версиями. Кратко рассмотрим анализ этого класса

Его можно найтиinsert,queryЭти методы уже инкапсулированы, и нам нужно только передать соответствующие параметры для выполнения таких операций, как вставка, обновление и запрос. КонечноSQLiteDatabaseТакже предусмотрено прямое исполнениеSQLметод оператора, такой как

  • execSQL

    db.execSQL("create table if not exists " + TABLE_NAME +"(id text primary key,name text)");

  • rawQuery

    db.rawQuery("SELECT * FROM test", null);

3.2 SQLiteOpenHelper

SQLiteOpenHelperдаSQLiteDatabaseвспомогательный класс, черезSQLiteDatabaseИнкапсуляция внутренних методов упрощает создание базы данных и управление версиями. Это абстрактный класс.В общем, нам нужно наследовать и переопределить эти два метода родительского класса:

  • onCreate Он будет вызываться только при первом создании базы данных, обычно мы переписываемonCreateСоздайте структуру таблицы базы данных и добавьте некоторые данные инициализации, используемые приложением.
  • при обновлении Этот метод вызывается при обновлении версии базы данных.Мы обычно выполняем здесь операции обновления базы данных, такие как обновление полей, добавление и удаление таблиц и т. д.

Кроме того, метод родительского класса имеетonConfigure,onDowngrade,onOpen, они редко используются в общих проектах.Если вам нужно узнать больше, вы можете обратиться к официальной документации.

3.3 Связь между SQLiteOpenHelper и SQLiteDatabase

законченныйSQLiteOpenHelperа такжеSQLiteDatabaseПосле этого как они связаны? Давайте посмотрим на исходный код

SQLiteOpenHelperПредоставляет два метода для создания базы данных

  • getWritableDatabase
  • getReadableDatabase

Из исходного кода мы видим, что эти два метода имеют одну общую черту: они оба вызываютgetDatabaseLockedЭтот метод, давайте рассмотримgetDatabaseLockedСюда

  • первый шаг
  • второй шаг
  • третий шаг

Из вышеприведенного анализа мы видим, чтоSQLiteOpenHelperкак шаг за шагом, позвонивSQLiteDatabaseметод созданияэкземпляр базы данных, это также показываетSQLiteOpenHelperявляется более высоким измерениемSQLiteDatabaseупаковка.

3.4 Процесс создания объекта SQLiteDatabase

В итогеSQLiteOpenHelperиSQLiteDatabaseПосле отношений междуSQLiteDatabaseПроцесс генерации объекта также можно использовать как тот, который мы будем использовать позже в процессе разработки.SQLiteШаблон , мы можем сгенерировать его следующими тремя способамиSQLiteDatabase.

  • наследоватьSQLiteOpenHelper,перечислитьgetWritableDatabase / getReadableDatabaseОткройте или создайте базу данных (рекомендуется для начинающих)
  • перечислитьSQLiteDatabase.openOrCreateDatabaseОткройте или создайте базу данных
  • перечислитьContext.openOrCreateDatabaseОткройте или создайте базу данных

В конечном итоге эти три метода называютсяSQLiteDatabase.openDatabaseметодТак как это называетсяSQLiteDatabase.openDatabase, то давайте посмотрим на его исходный код

объяснить параметры

  • String pathпуть к файлу базы данных
  • CursorFactory factoryИспользуется для создания пользовательского объекта подкласса Cursor, который возвращается при выполнении операции запроса. Если передается значение null, для создания курсора используется фабрика по умолчанию.
  • int flagsИспользуется для управления режимом доступа к базе данных, параметры, которые могут быть переданы:
    • CREATE_IF_NECESSARY: создать файл базы данных, если база данных не существует.
    • ENABLE_WRITE_AHEAD_LOGGING: Обход механизма блокировки базы данных, чтение и запись в режиме многопоточной работы базы данных
    • NO_LOCALIZED_COLLATORS: При открытии базы данных не сортировать базу данных по локализованному языку.
    • OPEN_READONLY: открыть базу данных только для чтения
    • OPEN_READWRITE: открыть базу данных для чтения и записи
  • DatabaseErrorHandler errorHandlerИнтерфейс для обратного вызова при обнаружении повреждения базы данных, обычно нет особой необходимости передавать null

Видно, что мы проходимopenDatabaseгенерироватьSQLiteDatabaseэкземпляр и будетэкземпляр базы данныхСостояние включено и, наконец, возвращаетсяэкземпляр базы данных.

3.5 Путь для создания базы данных

SQLiteDatabaseВ исходном коде есть строка офайл базы данныхпуть, связанный

final File filePath = mContext.getDatabasePath(mName);

Путь, который мы получаем с помощью этого кода,

/data/data/<package_name>/databases/

В общем, когда мы создаем базу данныхпараметр путиПросто пройди"xxx.db", система автоматически создаст файл с именем "xxx.db», самым большим преимуществом этого является безопасность, потому что изAndroid7Начинать,Androidограничения стратегииAppправа доступа друг к другу, что также позволяетAppбезопасность гарантирована.

4 Разработка демо-версии SQLite

через вышеизложенное оSQLiteDatabaseОсновное понимание класса, давайте начнем непосредственноDemo

4.1 Создание MySQLiteOpenHelper

Первым шагом мы используем самое быстрое созданиеSQLiteDatabaseпуть, то есть наследованиеSQLiteOpenHelperсоздать свой собственныйMySQLiteOpenHelper,следующее

4.2 Создание SQLiteCattleAActivity

созданныйMySQLiteOpenHelperПосле этого нам нужно создать новыйActivityиспользовать его

Здесь мы используем два метода для созданияэкземпляр базы данных, соответственноSQLiteDatabaseсвояopenOrCreateDatabaseи мы создалиMySQLiteOpenHelperизgetWritableDatabaseсоздавать

4.3 Подключение к SQLiteStudio для отладки в реальном времени

Как и в предыдущих двух шагах, мы разработали основныеApp, реализует базовую кнопку нажатия для завершения «добавления, удаления, изменения и проверки функции», но, в конце концов, база данных находится в мобильном телефоне, как мы выполняем отладку базы данных в реальном времени? Ниже описан метод, основанный наSQLiteStudioотладка в реальном времени так какSQLiteбаза данныхфайл базы данныхХранится в справочнике мобильного телефона в видеSQLite, поэтому нам нужно использоватьSQLiteStudioвозможности сквозной связи для полученияSQLiteДанные.

4.3.1 Конфигурация среды SQLiteStudio

Первый шаг, который нам нужно экспортироватьSQLiteStudio изУдаленный пакет JAR, шаги для экспортаTools->Get Android Connect Jar FileполучитьБаночка пакет, и положиБаночка пакетна проектекорневой каталог/библиотекипод.

нам нужно включитьSQLiteStudio изSQLiteРазрешение на отладку базы данных, шаги выполненыTools->Open configuration dialogОткройте интерфейс конфигурации и проверьте панель плагинов.SQLiteопции.

4.3.2 Конфигурация среды проекта Android

настроенSQLiteStudioПосле этого настроим нашAppпроект, который мы ранее представилиУдаленный пакет JAR, вставьте нашкорневой каталог/библиотекиНиже, ниже нам также нужны проектфайл build.gradleна письмеimplementation fileTree(include: ['*.jar'], dir: 'libs')гарантироватьlibsпод всемиБаночка пакетможно нормально импортировать.

ИмпортироватьБаночка пакетПосле этого нам просто нужно добавить в нашActivityдобавить строку кодаSQLiteStudioService.instance().start(this);доступны в нашемActivityЗапускается сразу после включенияSQLiteStudioServiceэкземпляр, прослушиваниеAndroidизххх порт, ждем пультSQLiteStudioподключить.

4.3.3 SQLiteStudio подключается к мобильному телефону для отладки в реальном времени

НастроеноAppПосле этого просто начнитеApp, вы можете создать его в каталогефайл базы данных, то мы можемSQLiteStudioИнтерфейс подключается удаленно.

Добавленные шаги аналогичны предыдущим, но мы выбираем тип данныхAndroid SQLite, затем выберитефайл базы данных, мы выбираемport forwarding, подключенный к телефону12121 порт(Это то, что я сказал раньше)SQLiteStudioServiceПорт, который экземпляр прослушивает, и затем вы можете успешно отлаживать.

5 рекомендаций по питанию

Вышеизложенное касаетсяAndroidконецSQliteвкусаЭксклюзивное съедобное руководствоТеперь, из-за проблем с местом, я лишь кратко описал несколько аспектов, но я думаю, что все смогут понять.SQliteОсновной процесс развития. Конечно, это простоSQliteПервая статья в этом разделе, за которой следуют еще две статьи, будут посвящены двум другим областям, в том числеSQliteбезопасная версия иSQliteАнализ исходного кода реализации.

В этой статье используетсяmdniceнабор текста