Работа с БД SQlite в Android Studio

SQLite – это наиболее подходящая база данных для хранения информации в системе Android. Ее рекомендуется использовать всем разработчикам, которые создают программы на мобильную операционную систему от Google.

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

Создаем и наполняем базу данных информацией

Самое интересное в работе-создании базы данных – добавление основной информации в стартовую версию. Здесь придется много кодить, однако, в дальнейшем придется немного писать, так как потребуются со временем лишь небольшие правки. Вот, что, к примеру, можно использовать для заполнения (у пользователей может быть совершенно по-другому):

<string-array name=»catlist»>
<item>Барсик</item>
<item>Мурзик</item>
<item>Васька</item>
<item>Рыжик</item>
</string-array>

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

package ru.alexanderklimov.catbase;

import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper {

private final Context fContext;
private static final String DATABASE_NAME = «cat_database.db»;
public static final String TABLE_NAME = «cattable»;

DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
fContext = context;
}

@Override
public void onCreate(SQLiteDatabasedb) {
// TODO Auto-generated method stub
db.execSQL(«CREATE TABLE » + TABLE_NAME + » (»
+ «_id INTEGER PRIMARY KEY,» + «title TEXT» + «);»);

// Добавляем записи в таблицу
ContentValues values = new ContentValues();
// Получим массив строк иp ресурсов
Resources res = fContext.getResources();
String[] cattable_records = res.getStringArray(R.array.catlist_v1);
// проходим через массив и вставляем записи в таблицу
int length = cattable_records.length;
for (inti = 0; i&lt; length; i++) {
values.put(«title», cattable_records[i]);
db.insert(TABLE_NAME, null, values);
}
}

@Override
public void onUpgrade(SQLiteDatabasedb, intoldVersion, intnewVersion) {
// TODO Auto-generated method stub
Log.w(«TestBase», «Upgrading database from version » + oldVersion
+ » to » + newVersion + «, which will destroy all old data»);
db.execSQL(«DROP TABLE IF EXISTS » + TABLE_NAME);
onCreate(db);
}
}

Однако, это еще не все. В методе onCreate() нужно создать и заполнить таблицу данными из ресурсов. А затем – конец работы, необходимо подключить класс в основе всей активности БД SQLite. Выглядеть код будет следующим образом:

setContentView(R.layout.activity_test);

// Инициализируем наш класс-обёртку
DatabaseHelperdbh = new DatabaseHelper(this);

// База нам нужна для записи и чтения
SQLiteDatabasesqdb = dbh.getWritableDatabase();

// закрываем соединения с базой данных
sqdb.close();
dbh.close();

Все. На этом будет готова база данных. Однако, есть еще один способ со сложным заполнением. Там уже требуется внести немного больше усилий.

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

<?xml version=»1.0″ encoding=»utf-8″?>
<cats>
<record title=»Барсик» color=»чёрный» />
<record title=»Мурзик» color=»белый» />
<record title=»Рыжик» color=»рыжий» />
<record title=»Васька» color=»серый» />
</cats>

Здесь также добавляется цвет шерсти кота. При желании, пользователь может дополнить свою базу атрибутами. Но для примера подойдет такой вариант. Далее – требуется модифицировать уже готовую «обертку» из первого варианта. Теперь она приобретет такой внешний вид:

package ru.alexanderklimov.catbase;

import java.io.IOException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper {

private final Context fContext;
private static final String DATABASE_NAME = «colorcat_database.db»;
public static final String TABLE_NAME = «cattable»;

DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
fContext = context;
}

@Override
public void onCreate(SQLiteDatabasedb) {
// TODO Auto-generated method stub
db.execSQL(«CREATE TABLE » + TABLE_NAME + » (»
+ «_id INTEGER PRIMARY KEY, » + «title TEXT, » + «color TEXT»
+ «);»);

// Добавляем записи в таблицу
ContentValues values = new ContentValues();

// Получим файл из ресурсов
Resources res = fContext.getResources();

// Открываем xml-файл
XmlResourceParser _xml = res.getXml(R.xml.cats_records);
try {
// Ищем конец документа
inteventType = _xml.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
// Ищем теги record
if ((eventType == XmlPullParser.START_TAG)
&& (_xml.getName().equals(«record»))) {
// Тег Record найден, теперь получим его атрибуты и
// вставляем в таблицу
String title = _xml.getAttributeValue(0);
String color = _xml.getAttributeValue(1);
values.put(«title», title);
values.put(«color», color);
db.insert(TABLE_NAME, null, values);
}
eventType = _xml.next();
}
}
// Catch errors
catch (XmlPullParserException e) {
Log.e(«Test», e.getMessage(), e);
} catch (IOException e) {
Log.e(«Test», e.getMessage(), e);

} finally {
// Close the xml file
_xml.close();
}

}

@Override
public void onUpgrade(SQLiteDatabasedb, intoldVersion, intnewVersion) {
// TODO Auto-generated method stub
Log.w(«TestBase», «Upgrading database from version » + oldVersion
+ » to » + newVersion + «, which will destroy all old data»);
db.execSQL(«DROP TABLE IF EXISTS » + TABLE_NAME);
onCreate(db);
}
}

И теперь, когда пользователь станет открывать свою таблицу с данными, у него будет появляться такой результат его усилий при работе с SQLite:

_idtitlecolor
1БарсикЧерный
2МурзикБелый
3РыжикРыжий
4ВаськаСерый

Изменение данных

Со временем может возникнуть необходимость в изменении данных. Ввиду этого, придется применить небольшую строчку кода с определенными параметрами. Она не будет вызывать недоумения, так как очень проста. Вот таким образом станет выглядеть новая команда, которую введет пользователь на запрос обновления данных:

UPDATE «таблица» SET поле = значение

Стоит непосредственно разобраться с тем, как что реализуется. Если говорить простым языком, то сам UPDATE – является запросом на обновление данных. И следовательно, именно она является главным компонентом в строке кода. А вот уже SET нужен для того, чтобы через запятую после него перечислить поля, а также значения, нужные для применения. Вот, что может получиться:

UPDATE goods SET price = 150 WHERE num = 2

И все это проводится с таблицей, выглядящей вот таким образом:

numtitleprice
1Чайник300
2Чашка100
3Ложка25
4Тарелка100

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

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

UPDATE goods SET price = price / 2 WHERE price >= 100

В нескольких полях строки также может потребоваться обновление данных. Производится оно, опять же, немного измененной командой. Выглядит она так:

UPDATE goods SET title = «утюг», price = 300 WHERE num = 2

На этом с изменением данных тема закончена. Остается разбор исключительно удаления информации из таблицы.

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

Удаление данных из таблицы данных SQL делается очень легко. Для этого используется оператор DELETE, а сама команда читается как:

DELETE FROM «имя таблицы»
WHERE «условие»

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

DELETE FROM «имя_таблицы»

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

Образовательный портал 3TY.RU
Adblock
detector