Android: Как добавить в приложение работу с базой

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

Шаг 1: Какая у нас база данных

Фактически все сводится к описанию списка полей и созданию таблиц, а еще по правилам хорошего тона все записывают отдельный «контрактик» с константами имен (ExampleContract.ExampleEntry) — но на самом деле это только хороший тон, чтобы Вас другие поняли и прочитали, всегда помните об этом.

public final class ExampleContract {
     public ExampleContract() {}
          public static abstract class ExampleEntry implements BaseColumns {
               public static final String TABLE_NAME = "example";
               public static final String COLUMN_NAME_FIELD1 = "field1";
               public static final String COLUMN_NAME_FIELD2 = "field2";
          }       
     }
}

Шаг 2. Как мы работаем с базой

Ничто так не важно, как присоединить базу к приложению) поэтому мы пишем специальный «соединитель», в котором сейчас нас интересует только выражание
создания структуры таблицы (а может быть и много таблиц, и не тупое «убей и создай новую» обновление структуры, да и унаследованные методы очень даже можно переписать, так что можно разгуляться)

package com.ksu.questions;
 
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
public class ExampleDBHelper extends SQLiteOpenHelper {
     public static final int DATABASE_VERSION = 1; //версия !!! внимание если изменишь структуру меняй цифру
     public static final String DATABASE_NAME = "Example.db"; //имя базы
 
     private static final String SQL_CREATE_ENTRIES =
           "CREATE TABLE " + ExampleContract.ExampleEntry.TABLE_NAME + " ("
           ExampleContract.ExampleEntry._ID + " INTEGER PRIMARY KEY, " 
           ExampleContract.ExampleEntry.COLUMN_NAME_FIELD1 + " TEXT," + 
           ExampleContract.ExampleEntry.COLUMN_NAME_FIELD2 + " TEXT" +
     " )";
     //дальше все уже можно не менять (или менять когда нужно))))
     private static final String SQL_DELETE_ENTRIES 
          = "DROP TABLE IF EXISTS " + ExampleContract.ExampleEntry.TABLE_NAME;
     public ExampleDBHelper(Context context ) {
          super(context, DATABASE_NAME, null, DATABASE_VERSION);
     }
     public void onCreate(SQLiteDatabase db) {
          db.execSQL(SQL_CREATE_ENTRIES);
     }
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion ) {
          db.execSQL(SQL_DELETE_ENTRIES);
          onCreate(db);
     }
     public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion ) {
          onUpgrade( db, oldVersion, newVersion );
     }
}

Шаг 3. Как записать в базу

Вставку делаем через объект ContentValues, который наполняем нужными данными (кстати, не обязательно всеми сразу — на разных шагах можно давать разные кусочки из интерфейсных взаимодействий, накапливать например набивку полей профиля пользователя не с одной длинной страницы, а по шагам)))) а потом в конце уже сохранять

ContentValues testValues = new ContentValues();
testValues.put(ExampleContract.ExampleEntry.COLUMN_NAME_FIELD1, 'test');
testValues.put(ExampleContract.ExampleEntry.COLUMN_NAME_FIELD2, 'test2');
QuestionDBHelper mDbHelper = new ExampleDBHelper(getBaseContext());
SQLiteDatabase  db = mDbHelper.getWritableDatabase();
long newRowId;
newRowId = db.insert(
	ExampleContract.ExampleEntry.TABLE_NAME,
	null,
	testValues);

Шаг 4. Как выполнить любой запрос

Мы можем выполнить фактически любой запрос, например обновление (перечислить поля, добавить WHERE)

QuestionDBHelper mDbHelper = new  ExamplenDBHelper(getBaseContext());
SQLiteDatabase db  = mDbHelper.getReadableDatabase();
String updateQuery = "UPDATE " +  ExampleContract.ExampleEntry.TABLE_NAME + " SET field_1='test' WHERE _ID=2"; 
db.execSQL(updateQuery);

Шаг 5. Как получить записи

Мы можем выполнить фактически любой запрос (перечислить поля, добавить WHERE) и получить список — делай что хочешь дальше

QuestionDBHelper mDbHelper = new ExampleDBHelper(getBaseContext());
SQLiteDatabase db = mDbHelper.getReadableDatabase();
String selectQuery = "SELECT " + ExampleContract.ExampleEntry._ID + ", " + ExampleContract.ExampleEntry.COLUMN_NAME_FIELD1 
                    + " FROM " + ExampleContract.ExampleEntry.TABLE_NAME;
Cursor cursor = db.rawQuery(selectQuery, null);
if(cursor.getCount() > 0){
     while (cursor.moveToNext()) {
          Long id = cursor.getLong(0); //оставить числом можно
          String field_1 = cursor.getString(1); //или прямо так для текстовых полей)
     }
}

Оставить комментарий

XHTML: Вы можете использовать такие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">