Создаем базу данных SQLite Database
Главная » Создаем базу данных SQLite Database

Сегодня мы сделаем приложение, которое с помощью использования базы данных SQLite Database будет способно сохранять введенные в него данные и выдавать их пользователю при запуске приложения. Мы сделаем более упрощенное приложение и здесь пока не будет возможности для пользователя вводить данные в базу, данные мы введем сами в коде класса MainActivity и они будут храниться и отображаться базой данных при запущенном приложении. 

Не охота влезать в теорию, поэтому если вы хотите постигнуть всю теорию основ работы с базами данных в Android, то поищите ее на других ресурсах, либо ждите, пока она появится здесь :). Мы же просто сделаем несложный пример занесения данных в базу SQLite Database и их чтение и отображение пользователю.

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

 <TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Пример работы Android SQLiteDatabase"
 android:textSize="12pt"/>

 <TextView
 android:id="@+id/content_list"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:textSize="8pt"/>
 
</LinearLayout>

Теперь перейдем к работе в классе MainActivity.java. Здесь мы объявляем объект класса SQLiteAdapter, который нужен для связи activity приложения с базой данных. Мы выполняем с ним следующие действия: открываем для записи, удаляем все, что там уже есть, с помощью команды insert выполняем запись данных и закрываем. После этого, открываем ту же базу уже для чтения, берем с нее все данные и отображаем в TextView:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

 private SQLiteAdapter mySQLiteAdapter;

 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 TextView listContent = (TextView)findViewById(R.id.content_list);

 // Создаем/открываем SQLite базу данных для записи, удаляем все ее содержимое,
 // заполняем указанным содержимым с помощью команды insert, и закрываем:
 mySQLiteAdapter = new SQLiteAdapter(this);
 mySQLiteAdapter.openToWrite();
 mySQLiteAdapter.deleteAll();
 mySQLiteAdapter.insert("Привет");
 mySQLiteAdapter.insert("вот так");
 mySQLiteAdapter.insert("мы ");
 mySQLiteAdapter.insert("храним текст");
 mySQLiteAdapter.insert("в базе данных");
 mySQLiteAdapter.close();

 // Открываем ту же базу данных для чтения ее содержимого:
 mySQLiteAdapter = new SQLiteAdapter(this);
 mySQLiteAdapter.openToRead();

 //Вытаскиваем всю информацию в качестве строковых ресурсов:
 String contentRead = mySQLiteAdapter.queueAll();
 mySQLiteAdapter.close();

 // Отображаем прочитанные данные в TextView:
 listContent.setText(contentRead);

 }
}

Работа в этом классе закончена. Но пока что у нас нет самого главного - адаптера SQLiteAdapter.

Создаем новый класс под названием SQLiteAdapter. Этот файл мы заполняем следующим образом:

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class SQLiteAdapter {

 // Вводим используемые значения и переменные:
 public static final String DATABASE_NAME = "MY_DATABASE";
 public static final String DATABASE_TABLE = "MY_TABLE";
 public static final int DATABASE_VERSION = 1;
 public static final String KEY_CONTENT = "Content";

 // Создаем таблицу с данными MY_DATABASE:
 private static final String SCRIPT_CREATE_DATABASE = DATABASE_TABLE + KEY_CONTENT;

 private SQLiteHelper sqLiteHelper;
 private SQLiteDatabase sqLiteDatabase;
 private Context context;

 public SQLiteAdapter(Context c){context = c;
 }

 // Читаем данные с базы данных:
 public SQLiteAdapter openToRead() throws android.database.SQLException {
 sqLiteHelper = new SQLiteHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
 sqLiteDatabase = sqLiteHelper.getReadableDatabase();
 return this;
 }

 // Записываем данные в базу данных:
 public SQLiteAdapter openToWrite() throws android.database.SQLException {
 sqLiteHelper = new SQLiteHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
 sqLiteDatabase = sqLiteHelper.getWritableDatabase();
 return this;
 }

 // Закрываем sqLiteHelper:
 public void close(){sqLiteHelper.close();
 }

 // Вставляем введенное содержимое в базу:
 public long insert(String content){
 ContentValues contentValues = new ContentValues();
 contentValues.put(KEY_CONTENT, content);
 return sqLiteDatabase.insert(DATABASE_TABLE, null, contentValues);
 }

 // Удаляем все содержимое базы данных:
 public int deleteAll(){return sqLiteDatabase.delete(DATABASE_TABLE, null, null);
 }

 // Делаем запрос на получение текстовых данных с базы, отображаемых в виде столбца:
 public String queueAll(){
 String[] columns = new String[]{KEY_CONTENT};
 Cursor cursor = sqLiteDatabase.query(DATABASE_TABLE, columns,null, null, null, null, null);
 String result = "";

 int index_CONTENT = cursor.getColumnIndex(KEY_CONTENT);
 for(cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()){
 result = result + cursor.getString(index_CONTENT) + "\n";
 }
 return result;
 }

 public class SQLiteHelper extends SQLiteOpenHelper {
 public SQLiteHelper(Context context, String name,CursorFactory factory, int version) {
 super(context, name, factory, version);
 }

 // Метод, создающий таблицу для хранения данных:
 @Override
 public void onCreate(SQLiteDatabase db) {db.execSQL(SCRIPT_CREATE_DATABASE);
 }

 // Метод для обновления базы данных, оставим пустым:
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 }
 }
}

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

- ввод используемых переменных;

onCreate () - создание базы;

onUpgrade () - обновление базы в случае надобности. Мы задаем версию базы:

 public static final int DATABASE_VERSION = 1;

это значит, что в случае смены версии базы заработает метод обновления для обновления ее содержимого;

- метод openToWrite () - открывает базу для записи данных;

- метод openToRead () - выполняет чтение данных;

- метод close - закрываем базу;

- метод insert - вводим в базу данные в формате "ключ - значение"

deleteAll() - удаляем все данные с базы;

Ну что же, запустим наше приложение и посмотрим на результат:

Работает база данных

Внесение и чтение данных в базу данных SQLite Database произведено успешно! 

Также вспомните работу с хранением настроек приложения с помощью SharedPreferences

Категория: Уроки программирования | Просмотров: 2322 | Добавил: Oleg | Теги: Android база данных, SQLite Database, Android DB, храним данные в базе данных | Рейтинг: 2.3/3
Всего комментариев: 4
avatar
1 yuriy • 12:30, 28.07.2015
Добрый день! В данном уроке у меня вылазит ошибка В приложении ‘Имя приложения’ произошла ошибка. Как можно сделать чтоб на планшете работало приложение?
avatar
2 Никита Абрамов • 21:14, 28.09.2015
Учи основы Java и все работать будет.
avatar
3 dosan015 • 11:28, 19.12.2015
У меня тоже ошибок 'Имя приложения’ произошла ошибка.
Вот лог:
E/AndroidRuntime(11729): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dosan.db2/com.dosan.db2.MainActivity}: android.database.sqlite.SQLiteException: near "MY_TABLEContent": syntax error (code 1): , while compiling: MY_TABLEContent
avatar
4 dosan015 • 12:37, 19.12.2015
Я нашел ошибку
private static final String SCRIPT_CREATE_DATABASE = "create table " + DATABASE_TABLE +" ( " +KEY_CONTENT+ ");" ;
avatar