Урок 34. Работа с базами данных SQLite в Android

На прошлом уроке мы рассмотрели самый простой способ хранения данных -SharedPreferences. Но этот способ не подходит для хранения большого объема структурированных данных. На этом уроке рассмотрим работу с базой данных SQLite в android. SQLite является бесплатной библиотекой, которая реализует автономные базы данных, не нуждающиеся в серверах и не требовательные к ресурсам, компактные и надежные. Работа с БД SQLite выполняется посредством команд языка SQL, синтаксис и список ключевых слов языка SQL можно посмотреть на сайте sqlite.org. SQLite читает и пишет данные в обычные файлы на диске. Полная база данных SQL с несколькими таблицами, индексами, триггерами и представлениями, компактно хранится в одном файле. Все android устройства поддерживают работу с SQLite.

Исходный код под видео:

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

        <EditText
            android:id="@+id/etName"
            android:hint="Name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </EditText>

        <EditText
            android:id="@+id/etEmail"
            android:hint="Email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </EditText>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Add">
        </Button>
        <Button
            android:id="@+id/btnRead"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Read">
        </Button>
        <Button
            android:id="@+id/btnClear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Clear">
        </Button>
    </LinearLayout>
</LinearLayout>
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper  extends SQLiteOpenHelper{

    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "contactDb";
    public static final String TABLE_CONTACTS = "contacts";

    public static final String KEY_ID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_MAIL = "mail";

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_CONTACTS + "(" + KEY_ID
                + " integer primary key," + KEY_NAME + " text," + KEY_MAIL + " text" + ")");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists " + TABLE_CONTACTS);

        onCreate(db);

    }
}
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    Button btnAdd, btnRead, btnClear;
    EditText etName, etEmail;

    DBHelper dbHelper;

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

        btnAdd = (Button) findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(this);

        btnRead = (Button) findViewById(R.id.btnRead);
        btnRead.setOnClickListener(this);

        btnClear = (Button) findViewById(R.id.btnClear);
        btnClear.setOnClickListener(this);

        etName = (EditText) findViewById(R.id.etName);
        etEmail = (EditText) findViewById(R.id.etEmail);

        dbHelper = new DBHelper(this);
    }

    @Override
    public void onClick(View v) {

        String name = etName.getText().toString();
        String email = etEmail.getText().toString();

        SQLiteDatabase database = dbHelper.getWritableDatabase();

        ContentValues contentValues = new ContentValues();


        switch (v.getId()) {

            case R.id.btnAdd:
                contentValues.put(DBHelper.KEY_NAME, name);
                contentValues.put(DBHelper.KEY_MAIL, email);

                database.insert(DBHelper.TABLE_CONTACTS, null, contentValues);
                break;

            case R.id.btnRead:
                Cursor cursor = database.query(DBHelper.TABLE_CONTACTS, null, null, null, null, null, null);

                if (cursor.moveToFirst()) {
                    int idIndex = cursor.getColumnIndex(DBHelper.KEY_ID);
                    int nameIndex = cursor.getColumnIndex(DBHelper.KEY_NAME);
                    int emailIndex = cursor.getColumnIndex(DBHelper.KEY_MAIL);
                        do {
                            Log.d("mLog", "ID = " + cursor.getInt(idIndex) +
                                            ", name = " + cursor.getString(nameIndex) +
                                            ", email = " + cursor.getString(emailIndex));
                        } while (cursor.moveToNext());
                } else
                    Log.d("mLog","0 rows");

                cursor.close();
                break;

            case R.id.btnClear:
                database.delete(DBHelper.TABLE_CONTACTS, null, null);
                break;
        }
        dbHelper.close();
    }
}

Больше уроков:

Уроки Android Studio: тут
Инструменты android разработчика: тут
Дизайн android приложений: тут
Уроки создания игр для android: тут
Основы программирования на JAVA: тут

Урок 33. SharedPreferences – сохранение данных в приложениях | Уроки Android Studio

Урок 35. Добавление и удаление строк в базе данных SQLite в Android

Коментарі: 6
  1. eman
    eman

    Если у кого-то пример не работает и ругается на класс DBHelper, то в файле DBHelper.java добавьте самой первой строкой:
    package com.example.p0341simplesqlite;
    где “p0341simplesqlite” это имя модуля

    Эта строка должна совпадать с аналогичной первой строкой в файле mainActivity.java

  2. Monoleet
    Monoleet

    Доброго времени суток.

    Сломал голову, но так и не могу понять, почему при нажатии кнопки READ у меня всегда получается лог “rows 0”

    Код проверил 100500 раз,
    потом скопировал с этой страницы,
    всё равно “rows 0″(((

    Подскажите кто-нибудь что за беда?

    1. Matroso
      Matroso

      У меня была схожая проблема. Оказалось, что в скрипте создания таблицы пропустил пробел между названием столбца и типом. Исправил и увеличил DBHelper.DATABASES_VERSION, поскольку пересоздание таблицы выполняется в методе DBHelper.onUpgrade

Додати коментар