«Урок 34 Полное руководство по работе с базами данных SQLite в Android»

Программирование и разработка

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

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

Работа с базой начинается с создания таблиц, в которых будут храниться наши данные. Мы подробно рассмотрим процесс создания таблиц, добавления столбцов и определения типов данных, таких как INTEGER и TEXT. Важно также понимать, как работать с SQL-запросами query, включая операторы JOIN для объединения данных из разных таблиц.

Для доступа к данным в нашем приложении, используется объект SQLiteDatabase. Мы научимся выполнять операции добавления, обновления и удаления записей, а также извлекать данные с помощью курсора Cursor. Разберём, как эффективно использовать методы cursormovetonext и while для перебора записей.

Необходимость правильного управления базой данных в мобильном приложении нельзя недооценивать. Благодаря использованию правильных алгоритмов и методов, таких как static и final, наши приложения будут работать эффективно и стабильно, обеспечивая быстрый и надёжный доступ к данным в любой момент времени. Поддержка и обновление базы данных – ключевые аспекты, которые обеспечат долговечность и успешное функционирование вашего мобильного приложения.

Содержание
  1. Работа с SQLite в Android
  2. Создание базы данных и таблиц
  3. Добавление данных
  4. Чтение данных
  5. Обновление и удаление данных
  6. Заключение
  7. Создание базы данных
  8. Настройка SQLiteOpenHelper
  9. Создание и обновление схемы
  10. Основные операции с данными
  11. Создание и обновление таблиц
  12. Вставка данных
  13. Чтение данных
  14. Обновление данных
  15. Удаление данных
  16. Пример таблицы данных
  17. Вставка записей
Читайте также:  Полное руководство по адресации относительно регистра PC в Ассемблере ARM64

Работа с SQLite в Android

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

Для начала рассмотрим, как можно создать и управлять таблицами в SQLite посредством примера. SQLiteDatabase — это класс, который обеспечивает доступ к базе данных, и его методы позволяют выполнять основные операции с базой.

Создание базы данных и таблиц

Для создания базы данных используем класс SQLiteOpenHelper. Этот класс предоставляет удобные методы для создания и обновления базы данных. Рассмотрим пример:


public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "employer.db";
private static final int DATABASE_VERSION = 1;
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE employer ("
+ "employer_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "name TEXT, "
+ "position TEXT, "
+ "salary INTEGER);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS employer");
onCreate(db);
}
}

В этом примере создается таблица employer с четырьмя столбцами: employer_id, name, position, salary. Класс MyDatabaseHelper наследует SQLiteOpenHelper и переопределяет методы onCreate и onUpgrade для управления таблицами.

Добавление данных

Для добавления данных в таблицу используется метод insert:


public void addEmployer(SQLiteDatabase db, String name, String position, int salary) {
ContentValues values = new ContentValues();
values.put("name", name);
values.put("position", position);
values.put("salary", salary);
db.insert("employer", null, values);
}

Метод addEmployer добавляет запись в таблицу employer. ContentValues используется для хранения пары ключ-значение, где ключи соответствуют именам столбцов, а значения — данным, которые будут добавлены.

Чтение данных

Чтение данных

Для чтения данных из таблицы используется метод query. Рассмотрим пример:


public List<Employer> getAllEmployers(SQLiteDatabase db) {
List<Employer> employers = new ArrayList<>();
Cursor cursor = db.query("employer", null, null, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("employer_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String position = cursor.getString(cursor.getColumnIndex("position"));
int salary = cursor.getInt(cursor.getColumnIndex("salary"));
employers.add(new Employer(id, name, position, salary));
}
cursor.close();
}
return employers;
}

Метод getAllEmployers считывает все записи из таблицы employer и возвращает их в виде списка объектов Employer. Cursor используется для навигации по результатам запроса.

Обновление и удаление данных

Для обновления данных в таблице используется метод update, а для удаления — метод delete. Рассмотрим их на примере:


public void updateEmployer(SQLiteDatabase db, int id, String name, String position, int salary) {
ContentValues values = new ContentValues();
values.put("name", name);
values.put("position", position);
values.put("salary", salary);
db.update("employer", values, "employer_id = ?", new String[]{String.valueOf(id)});
}
public void deleteEmployer(SQLiteDatabase db, int id) {
db.delete("employer", "employer_id = ?", new String[]{String.valueOf(id)});
}

Методы updateEmployer и deleteEmployer позволяют обновлять и удалять записи в таблице employer соответственно, используя идентификатор записи.

Заключение

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

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

Для начала создания базы данных в приложении на языке Java, нам потребуется использовать класс SQLiteOpenHelper. Этот класс помогает управлять созданием базы, обновлением её структуры и доступом к данным.

Ниже представлен пример кода, который показывает, как можно создать класс, расширяющий SQLiteOpenHelper для управления нашей базой данных:


public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "example.db";
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE employer (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, position TEXT NOT NULL, salary REAL NOT NULL);");
db.execSQL("CREATE TABLE department (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, location TEXT NOT NULL);");
db.execSQL("CREATE TABLE employee (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, department_id INTEGER NOT NULL, FOREIGN KEY (department_id) REFERENCES department(id));");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS employer");
db.execSQL("DROP TABLE IF EXISTS department");
db.execSQL("DROP TABLE IF EXISTS employee");
onCreate(db);
}
}

В данном примере мы создаем три таблицы: employer, department и employee. Эти таблицы будут хранить информацию о сотрудниках, отделах и работодателях соответственно. Каждая таблица содержит уникальный идентификатор и другие поля, необходимые для хранения соответствующей информации.

Метод onCreate вызывается при первом создании базы данных и создает все необходимые таблицы. Если потребуется обновление структуры базы данных, метод onUpgrade удалит старые таблицы и создаст их заново.

Теперь рассмотрим алгоритм добавления данных в таблицу employer:


public void addEmployer(String name, String position, double salary) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", name);
values.put("position", position);
values.put("salary", salary);
db.insert("employer", null, values);
db.close();
}

В этом методе мы открываем базу данных для записи, создаем объект ContentValues для хранения значений столбцов, затем используем метод insert для добавления новой записи в таблицу employer.

Для получения данных из таблицы employer можно использовать следующий метод:


public List getAllEmployers() {
List employers = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM employer", null);
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
employers.add(name);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return employers;
}

Здесь мы открываем базу данных для чтения, выполняем SQL-запрос SELECT и сохраняем результат в объекте Cursor. С помощью метода moveToFirst и цикла while мы перебираем все записи и добавляем имена работодателей в список.

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

Настройка SQLiteOpenHelper

SQLiteOpenHelper обеспечивает разработчикам простой способ взаимодействия с SQLiteDatabase. Ключевые методы этого класса – onCreate() и onUpgrade() – создают таблицы и обновляют их структуру при необходимости. Рассмотрим их подробнее.

Для начала создадим класс, который наследуется от SQLiteOpenHelper. Внутри этого класса определим конструктор и переопределим методы onCreate() и onUpgrade().


public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "employer.db";
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_EMPLOYER_TABLE);
db.execSQL(CREATE_EMPLOYEE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS employer");
db.execSQL("DROP TABLE IF EXISTS employee");
onCreate(db);
}
private static final String CREATE_EMPLOYER_TABLE = "CREATE TABLE employer ("
+ "employer_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "name TEXT, "
+ "address TEXT);";
private static final String CREATE_EMPLOYEE_TABLE = "CREATE TABLE employee ("
+ "employee_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "name TEXT, "
+ "employer_id INTEGER, "
+ "FOREIGN KEY (employer_id) REFERENCES employer(employer_id));";
}

В приведённом выше примере создаются две таблицы: employer и employee. Таблица employee включает внешний ключ employer_id, что позволяет связать сотрудников с работодателями. Метод onCreate() вызывается при первой установке приложения и создает необходимые таблицы.

Когда требуется обновить структуру базы данных, метод onUpgrade() выполняет нужные изменения. В данном случае, старые версии таблиц удаляются, и создаются новые. Этот метод вызывается при изменении номера версии базы данных, указанного в конструкторе.

Пример использования класса DatabaseHelper в приложении:


public class MainActivity extends AppCompatActivity {
private DatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new DatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
// Добавление новой записи в таблицу employer
ContentValues values = new ContentValues();
values.put("name", "Tech Corp");
values.put("address", "123 Tech Street");
long newRowId = db.insert("employer", null, values);
// Чтение данных из таблицы employer
Cursor cursor = db.query(
"employer",
null,
null,
null,
null,
null,
null
);
while (cursor.moveToNext()) {
long employerId = cursor.getLong(cursor.getColumnIndexOrThrow("employer_id"));
String name = cursor.getString(cursor.getColumnIndexOrThrow("name"));
String address = cursor.getString(cursor.getColumnIndexOrThrow("address"));
// Обработка данных...
}
cursor.close();
}
}

В этом примере показано, как использовать DatabaseHelper для создания и управления базой данных в Android-приложении. Методы insert и query позволяют добавлять и считывать данные из таблиц, обеспечивая необходимую функциональность для работы с локальной базой данных.

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

Создание и обновление схемы

Для управления базой данных в java-приложении часто используют класс SQLiteOpenHelper, который упрощает создание и обновление схемы. В этом классе реализованы методы, такие как onCreate и onUpgrade, которые вызываются при необходимости создания новой базы данных или обновления существующей. Рассмотрим пример создания и обновления схемы базы данных на языке Java.

Для начала создадим класс, наследующий SQLiteOpenHelper, и реализуем его конструктор:

public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "company.db";
private static final int DATABASE_VERSION = 2;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

Метод onCreate вызывается при первой инициализации базы данных и используется для создания таблиц. Например, создадим таблицу employer:

@Override
public void onCreate(SQLiteDatabase db) {
String createEmployerTable = "CREATE TABLE employer ("
+ "employer_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "name TEXT, "
+ "position TEXT, "
+ "salary INTEGER)";
db.execSQL(createEmployerTable);
}

Когда требуется обновить схему базы данных, например, добавить новый столбец или таблицу, используется метод onUpgrade. Он вызывается при изменении версии базы данных (параметр DATABASE_VERSION). В следующем примере добавим столбец department в таблицу employer:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
String addDepartmentColumn = "ALTER TABLE employer ADD COLUMN department TEXT";
db.execSQL(addDepartmentColumn);
}
}

Этот алгоритм позволяет постепенно обновлять схему базы данных без потери данных. Чтобы проверить успешность обновления, можно выполнить запрос и вывести результат:

public List getAllEmployers() {
List employers = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM employer", null);
while (cursor.moveToNext()) {
String employer = cursor.getString(cursor.getColumnIndex("name"));
employers.add(employer);
}
cursor.close();
return employers;
}

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

Основные операции с данными

Создание и обновление таблиц

Для создания и обновления таблиц в базе данных используется класс SQLiteOpenHelper. Этот класс позволяет управлять версиями базы данных и обрабатывать обновления структуры при необходимости. Рассмотрим пример создания таблицы:

javaCopy codepublic class DatabaseHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "company.db";

private static final int DATABASE_VERSION = 1;

public DatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

@Override

public void onCreate(SQLiteDatabase db) {

String createTable = "CREATE TABLE employees (" +

"id INTEGER PRIMARY KEY AUTOINCREMENT, " +

"name TEXT, " +

"position TEXT, " +

"employer_id INTEGER)";

db.execSQL(createTable);

}

@Override

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

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

onCreate(db);

}

}

Вставка данных

Вставка данных

Для добавления новой записи в таблицу используется метод insert. В этом примере добавим нового сотрудника:

javaCopy codeContentValues values = new ContentValues();

values.put("name", "Иван Иванов");

values.put("position", "Менеджер");

values.put("employer_id", 1);

SQLiteDatabase db = dbHelper.getWritableDatabase();

long newRowId = db.insert("employees", null, values);

Чтение данных

Чтобы извлечь данные из таблицы, применяется метод query. Рассмотрим пример выборки всех сотрудников:

javaCopy codeSQLiteDatabase db = dbHelper.getReadableDatabase();

Cursor cursor = db.query(

"employees", // Таблица

null, // Все столбцы

null, // Условие WHERE

null, // Аргументы WHERE

null, // Группировка строк

null, // Условие HAVING

null // Порядок сортировки

);

while(cursor.moveToNext()) {

long itemId = cursor.getLong(cursor.getColumnIndexOrThrow("id"));

String name = cursor.getString(cursor.getColumnIndexOrThrow("name"));

// Другие операции с данными

}

cursor.close();

Обновление данных

Для изменения существующей записи используется метод update. В примере ниже изменим должность сотрудника:

javaCopy codeContentValues values = new ContentValues();

values.put("position", "Старший менеджер");

String selection = "id = ?";

String[] selectionArgs = { "1" };

int count = db.update(

"employees",

values,

selection,

selectionArgs);

Удаление данных

Удаление данных

Чтобы удалить запись из таблицы, используется метод delete. В следующем примере удалим сотрудника с определенным идентификатором:

javaCopy codeString selection = "id = ?";

String[] selectionArgs = { "1" };

int deletedRows = db.delete("employees", selection, selectionArgs);

Пример таблицы данных

Ниже приведен пример таблицы с данными сотрудников:

ID Имя Должность Employer ID
1 Иван Иванов Менеджер 1
2 Петр Петров Инженер 2

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

Вставка записей

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

Для вставки данных в таблицу используется метод insert класса SQLiteDatabase. Этот метод позволяет добавить новую запись в таблицу, указав необходимые значения для каждого столбца. Сначала следует создать объект ContentValues, в который будут помещены данные для вставки. Затем, посредством вызова метода insert, эти данные заносятся в таблицу.

Пример кода на языке Java:

public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "example.db";
private static final int DATABASE_VERSION = 1;
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE employer ("
+ "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "name TEXT, "
+ "position TEXT, "
+ "salary INTEGER)";
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS employer");
onCreate(db);
}
public boolean addEmployer(String name, String position, int salary) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", name);
values.put("position", position);
values.put("salary", salary);
long result = db.insert("employer", null, values);
return result != -1;
}
}

В этом примере создается класс MyDatabaseHelper, который наследуется от SQLiteOpenHelper. В методе onCreate создается таблица employer с четырьмя столбцами: id, name, position, salary. Метод addEmployer добавляет новую запись в таблицу, возвращая true в случае успешной вставки.

Важно учитывать, что перед добавлением данных необходимо убедиться в существовании базы и таблицы. В противном случае может возникнуть ошибка ClassNotFoundException. Создатели приложений могут использовать проверки и условные операторы для предотвращения таких ситуаций.

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

Оцените статью
bestprogrammer.ru
Добавить комментарий