Русский
Русский
English
Статистика
Реклама

Перевод Применение SQLiteOpenHelper и Database Inspector в Android-разработке

Автор статьи, перевод которой мы публикуем сегодня, хочет рассказать об использовании баз данных SQLite в Android-разработке. В частности он коснётся тут двух вопросов. Во-первых речь пойдёт о классе SQLiteOpenHelper, который применяется для работы с базами данных в коде приложений. Во-вторых он уделит определённое внимание инструменту Database Inspector, инспектору баз данных, встроенному в Android Studio.



Что такое SQLite?


SQLite это опенсорсная реляционная СУБД, похожая на MySQL. SQLite входит в состав стандартной библиотеки Android, где реализован движок базы данных, не нуждающийся в применении клиент-серверной архитектуры, не требующий особой настройки, поддерживающий транзакции. Для работы SQLite не нужен сервер баз данных. Всё, что нужно, хранится в обычных файлах. Полноценная БД SQLite, в которой имеется множество таблиц, триггеров, индексов и представлений, содержится в единственном, самом обыкновенном файле. Стандартная поддержка СУБД SQLite имеется во всех мобильных телефонах и в большинстве компьютеров. При этом работа с SQLite не требует решения задач по администрированию или настройке баз данных.

Android-разработчик, для выполнения CRUD-операций из своего приложения, может пользоваться пакетом android.database.sqlite.SQLiteDatabase, в котором реализованы все необходимые API.

Класс SQLiteOpenHelper


SQLiteOpenHelper это класс, встроенный в пакет android.database.sqlite.SQLiteDatabase. Это вспомогательный класс, который отвечает за создание баз данных SQLite и за управление их версиями. Для того чтобы воспользоваться возможностями этого класса, нужно создать его подкласс, в котором надо переопределить два метода onCreate() и onUpgrade(). Этот класс позволяет открывать существующие базы данных, создавать новые базы данных и обновлять версии баз данных.

Метод onCreate()


Метод onCreate() вызывается при создании базы данных. Он, в процессе жизненного цикла приложения, вызывается лишь один раз. А именно, его вызов производится при первом обращении к методу getReadableDatabase() или getWritableDatabase(). Эти методы принадлежат классу SQLiteOpenHelper.

В следующем примере показано создание экземпляра класса DatabaseHelper, являющегося наследником SQLiteOpenHelper:

DatabaseHelper dbh = new DatabaseHelper(getApplicationContext());

Вот код конструктора DatabaseHelper:

public DatabaseHelper(Context context) {super(context,dbName,null,version);context=this.context;}

Класс SQLiteOpenHelper вызывает метод onCreate() после создания базы данных и создания экземпляра класса SQLiteDatabase. Этот метод, напомним, вызывается лишь один раз, при создании базы данных:

@Overridepublic void onCreate(SQLiteDatabase db) {try {db.execSQL(CREATE_TABLE);} catch (Exception e) {}}

Метод onUpgrade()


Метод onUpgrade() вызывается в тех случаях, когда нужно обновить версию существующей базы данных:

@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL(DROP_TABLE);onCreate(db);}

Пример


Создадим простое Android-приложение и разберём практический пример работы с классом SQLiteOpenHelper. Это приложение, применяя данный класс, позволит нам добавлять записи о работниках некоей компании в таблицу Empdata базы данных Company.db.

Приложение имеет весьма простой интерфейс, описанный в файле activity_main.xml.


Интерфейс приложения

Вот содержимое файла MainActivity.java:

package www.sqliteopenhelper.sqliteopenhelper;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);EditText edtEmpName = findViewById(R.id.edtName);EditText edtDesig = findViewById(R.id.edtDesig);EditText edtSalary = findViewById(R.id.edtSalary);Button btnSave = findViewById(R.id.btnSave);DatabaseHelper dbh= new DatabaseHelper(getApplicationContext());btnSave.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Employee objEmp = new Employee(edtEmpName.getText().toString(),edtDesig.getText().toString(),Integer.parseInt(edtSalary.getText().toString()));if(dbh.InsertEmployee(objEmp))Toast.makeText(getApplicationContext(),"Record inserted successfully",Toast.LENGTH_LONG).show();elseToast.makeText(getApplicationContext(),"Record not inserted",Toast.LENGTH_LONG).show();}});}}

Вот содержимое Employee.java:

package www.sqliteopenhelper.sqliteopenhelper;public class Employee {private String employeeName;private String employeeDesig;private int employeeSalary;public Employee() {}public Employee(String employeeName, String employeeDesig, int employeeSalary) {this.employeeName = employeeName;this.employeeDesig = employeeDesig;this.employeeSalary = employeeSalary;}public String getEmployeeName() {return employeeName;}public String getEmployeeDesig() {return employeeDesig;}public int getEmployeeSalary() {return employeeSalary;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public void setEmployeeDesig(String employeeDesig) {this.employeeDesig = employeeDesig;}public void setEmployeeSalary(int employeeSalary) {this.employeeSalary = employeeSalary;}}

Вот файл DatabaseHelper.java:

package www.sqliteopenhelper.sqliteopenhelper;import android.content.ContentValues;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DatabaseHelper extends SQLiteOpenHelper {public static final int version = 1;public static String dbName="Company.db";public static final String TABLE_NAME ="Empdata";public static final String COL1 = "id";public static final String COL2 = "name";public static final String COL3 = "designation";public static final String COL4 = "salary";private static final String CREATE_TABLE="create table if not exists "+ TABLE_NAME + "(" + COL1 + " INTEGER PRIMARY KEY AUTOINCREMENT,"+COL2+" TEXT NOT NULL,"+ COL3 + " TEXT, " +COL4 + " INTEGER);";private static final String DROP_TABLE = "DROP TABLE IF EXISTS "+ TABLE_NAME;private Context context;public DatabaseHelper(Context context) {super(context,dbName,null,version);context=this.context;}@Overridepublic void onCreate(SQLiteDatabase db) {try {db.execSQL(CREATE_TABLE);} catch (Exception e) {}}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL(DROP_TABLE);onCreate(db);}public boolean InsertEmployee(Employee objEmp){SQLiteDatabase db=this.getWritableDatabase();ContentValues cv = new ContentValues();cv.put(COL2,objEmp.getEmployeeName());cv.put(COL3,objEmp.getEmployeeDesig());cv.put(COL4,objEmp.getEmployeeSalary());long result = db.insert(TABLE_NAME,null,cv);if(result == -1)return false;elsereturn true;}}

В коде DatabaseHelper.java видно, что класс DatabaseHelper является наследником класса SQLiteOpenHelper.

После того, как база данных создана, можно приступать к работе с ней. В частности создавать и обновлять поля её таблиц. При решении этих задач можно пользоваться объектом типа ContentValues, который позволяет хранить пары ключ-значение. Именно такие объекты используются для добавления новых записей в таблицы базы данных (с помощью метода insert() объекта SQLiteDatabase) и для обновления существующих записей (с помощью метода update()).

Database Inspector в Android Studio


Инструмент Database Inspector позволяет исследовать базы данных, используемые в приложениях, выполнять запросы к ним, модифицировать их, делая всё это во время работы приложений. Database Inspector имеется в Android Studio начиная с версии 4.1. Этот инструмент особенно полезен при отладке механизмов программ, ответственных за работу с базами данных. Database Inspector работает и с обычной реализацией SQLite, и с библиотеками, построенными на её основе, вроде Room. Database Inspector работает лишь с библиотекой SQLite, входящей в состав операционных систем Android, уровень API которых не ниже 26.

Для того чтобы открыть базу данных в Database Inspector нужно выполнить следующие действия:

  1. Запустите приложение в эмуляторе или на устройстве, подключённом к компьютеру. На эмуляторе или на устройстве должно присутствовать API не ниже 26 уровня.
  2. Выполните команду меню View > Tool Windows > Database Inspector.
  3. Выберите процесс выполняющегося приложения из выпадающего меню.
  4. В панели Databases появятся записи о базах данных, которые имеются в выбранном приложении. Теперь можно работать с этими базами данных.


Исследование базы данных с помощью Database Inspector

Обратите внимание на то, что есть одна проблема, связанная с аварийным завершением работы программ на эмуляторе Android 11 при подключении к Database Inspector. Если вы с этой проблемой столкнётесь здесь вы можете найти сведения о том, как с ней справиться.

Применяете ли вы SQLite в Android-разработке?
Источник: habr.com
К списку статей
Опубликовано: 19.04.2021 16:09:25
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании ruvds.com

Sql

Разработка мобильных приложений

Разработка под android

Sqlite

Android

Разработка

Ruvds_перевод

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru