Дек 30, 2016 - Android    2 комментария

Как работать с базой данных SQLite в Android Studio

Есть в блоге статья про базу данных на Delphi, есть статья про базу в Visual Studio+MSSQL, есть PHP+MySQL.

А давай-ка я добавлю Android Studio + SQLite icon smile Как работать с базой данных SQLite в Android Studio

Android Lollipop 291x350 Как работать с базой данных SQLite в Android Studio

Как создать проект, форму и поля с кнопками описано тут https://ds-release.ru/pervaya-programma-v-android-studio/

На форме размещаем три текстовых метки, три поля для ввода/отображения информации из базы, полей ФИО, Должность, Телефон и кнопку Сохранить

3 359x350 Как работать с базой данных SQLite в Android Studio

В закладке Text это выглядит вот так:

< ?xml version="1.0" encoding="utf-8"?>



    


    

    


    


    

    


    


    

    



    






В закладке Design так:

4 450x293 Как работать с базой данных SQLite в Android Studio

Далее создадим класс для работы с SQLite, назовем его ControlSQL

6 428x350 Как работать с базой данных SQLite в Android Studio

добавим расширение extends SQLiteOpenHelper

И в этом классе опишем функции работы с базой SQLLite

Получится такой код:

7 450x275 Как работать с базой данных SQLite в Android Studio

package ru.ds_release.database;

/**
 * Created by Sergey on 30.12.2016.
 */

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

public class ControlSQL extends SQLiteOpenHelper {


    private static final String DATABASE_NAME = "android.db";
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_TABLE = "table1";

    // поля таблицы для хранения ФИО, Должности и Телефона (id формируется автоматически)
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_FIO = "FIO";
    public static final String COLUMN_DOL = "DOL";
    public static final String COLUMN_TEL = "TEL";


    // формируем запрос для создания базы данных
    private static final String DATABASE_CREATE = "create table "
            + DATABASE_TABLE + "(" + COLUMN_ID
            + " integer primary key autoincrement, " + COLUMN_FIO
            + " text not null, " + COLUMN_DOL + " text not null,"
            + COLUMN_TEL + " text not null" + ");";


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

    @Override
    public void onCreate(SQLiteDatabase db) {

        //создаем таблицу
        db.execSQL(DATABASE_CREATE);

        //добавляем строку
        ContentValues initialValues = createContentValues("","","");
        db.insert(DATABASE_TABLE, null, initialValues);


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS table1");
        onCreate(db);
    }



    /**
     * Создаёт новый контакт. Если создан успешно - возвращается
     * номер строки rowId, иначе -1
     */
    public long createNewTable(String FIO, String DOL,
                              String TEL) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues initialValues = createContentValues(FIO, DOL,
                TEL);

        long row = db.insert(DATABASE_TABLE, null, initialValues);
        db.close();

        return row;
    }


    /**
     * Изменение строчки
     */
    public boolean updateTable(long rowId, String FIO, String DOL,
                              String TEL) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues updateValues = createContentValues(FIO, DOL,
                TEL);

        return db.update(DATABASE_TABLE, updateValues, COLUMN_ID + "=" + rowId,
                null) > 0;
    }

    /**
     * Удаление контакта
     */
    public void deleteTable(long rowId) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(DATABASE_TABLE, COLUMN_ID + "=" + rowId, null);
        db.close();
    }

    /**
     * Получение всех контактов
     */
    public Cursor getFullTable() {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.query(DATABASE_TABLE, new String[] { COLUMN_ID,
                        COLUMN_FIO, COLUMN_DOL,COLUMN_TEL }, null,
                null, null, null, null);
    }

    /**
     * Получаем конкретный контакт
     */
    public Cursor getTable(long rowId) throws SQLException {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor mCursor = db.query(true, DATABASE_TABLE,
                new String[] { COLUMN_ID, COLUMN_FIO, COLUMN_DOL,
                        COLUMN_TEL }, COLUMN_ID + "=" + rowId, null,
                null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }


    /*
     * Описываем структуру данных
     */
    private ContentValues createContentValues(String FIO, String DOL,
                                              String TEL) {
        ContentValues values = new ContentValues();
        values.put(COLUMN_FIO, FIO);
        values.put(COLUMN_DOL, DOL);
        values.put(COLUMN_TEL, TEL);
        return values;
    }






}


Когда надо что-то сделать с базой, например, прочитать значения, мы можем обратиться к базе.

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

Давайте при загрузке программы сделаем, чтобы в размещенные на форме поля брались значения из базы SQLLite, а при нажатии кнопки "Сохранить" - чтобы сохранялись измененные значения.

Для записи значений используем .updateTable

Если нужно не сохранять значение, а добавлять в базу, то нужно вызвать функцию .createNewTable

в итоге получился такой код

8 450x338 Как работать с базой данных SQLite в Android Studio


package ru.ds_release.database;

/**
 * Created by Sergey on 30.12.2016.
 */

import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity  extends AppCompatActivity {

    public static String fio_in = "";
    public static String dol_in = "";
    public static String tel_in = "";

    public static Integer num_in = 0;

    public EditText fio;
    public EditText dol;
    public EditText tel;
    private ControlSQL dbSQL;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //сначала обратимся к нашим полям и кнопке
        Button btn = (Button) findViewById(R.id.button1);
        fio = (EditText) findViewById(R.id.editText1);
        dol = (EditText) findViewById(R.id.editText2);
        tel = (EditText) findViewById(R.id.editText3);



        dbSQL = new ControlSQL(this);



        //получаем данные из таблицы

        Cursor newtable = dbSQL.getTable(1);

        //если есть строки
        if (newtable != null) {

            // идем на первую строку
            newtable.moveToFirst();


            //получаем значения ФИО, Должности и Телефона и присваиваем их нашим= полям
            num_in=newtable.getInt(0);
            fio_in=newtable.getString(1);
            dol_in=newtable.getString(2);
            tel_in=newtable.getString(3);

            fio.setText(fio_in);
            dol.setText(dol_in);
            tel.setText(tel_in);

        }



        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                // снова получаем значения полей
                fio_in=fio.getText().toString();
                dol_in=dol.getText().toString();
                tel_in=tel.getText().toString();

                //можно изменять значения, используя update

                dbSQL.updateTable(num_in,fio_in,dol_in,tel_in);


            }
        });
    }




}

Когда все скомпилируем (Build-Build APK), получится вот такое приложение, назовем его "Лучший спонсор":

9 180x350 Как работать с базой данных SQLite в Android Studio

При первом запуске откроется окно для сохранения настроек, например имени и телефона главного спонсора.

Первоначально поля пустые.

10 176x350 Как работать с базой данных SQLite в Android Studio

Заносим реквизиты спонсора, нажимаем Сохранить.

11 175x350 Как работать с базой данных SQLite в Android Studio

Информация сохраняется в базу SQLite.

Когда нужно вспомнить телефон спонсора, запускаем приложение, информация считывается из SQLite, и вуаля - спонсор на связи.

Скачать исходники можно по ссылке https://ds-release.ru/AndroidDataBase.rar

Отображать информацию можно либо в виде набора полей, либо в виде списка.

Для вывода списка используют обычно ListView или RecyclerView.

Продолжение: Как в Android Studio передавать данные на сервер в интернете

  Метки:
  admin
  Просмотров: 23 814
  Запись опубликована в 11:39

2 комментария

  • Здравствуйте, очень интересный сайт у вас, начинаю изучать android и достаточно подробно у вас здесь все написано. Спасибо за труды! Скажите, а что нужно чтобы программа записывала в базу данных несколько номеров (бесконечное количество контактов) а не только один. Спасибо!

    • ''Если нужно не сохранять значение, а добавлять в базу, то нужно вызвать функцию .createNewTable

Есть что сказать? Тогда действуй!