Как работать с базой данных SQLite в Android Studio
Есть в блоге статья про базу данных на Delphi, есть статья про базу в Visual Studio+MSSQL, есть PHP+MySQL.
А давай-ка я добавлю Android Studio + SQLite
Как создать проект, форму и поля с кнопками описано тут https://ds-release.ru/pervaya-programma-v-android-studio/
На форме размещаем три текстовых метки, три поля для ввода/отображения информации из базы, полей ФИО, Должность, Телефон и кнопку Сохранить
В закладке Text это выглядит вот так:
< ?xml version="1.0" encoding="utf-8"?>
В закладке Design так:
Далее создадим класс для работы с SQLite, назовем его ControlSQL
добавим расширение extends SQLiteOpenHelper
И в этом классе опишем функции работы с базой SQLLite
Получится такой код:
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
в итоге получился такой код
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), получится вот такое приложение, назовем его "Лучший спонсор":
При первом запуске откроется окно для сохранения настроек, например имени и телефона главного спонсора.
Первоначально поля пустые.
Заносим реквизиты спонсора, нажимаем Сохранить.
Информация сохраняется в базу SQLite.
Когда нужно вспомнить телефон спонсора, запускаем приложение, информация считывается из SQLite, и вуаля - спонсор на связи.
Скачать исходники можно по ссылке https://ds-release.ru/AndroidDataBase.rar
Отображать информацию можно либо в виде набора полей, либо в виде списка.
Для вывода списка используют обычно ListView или RecyclerView.
Продолжение: Как в Android Studio передавать данные на сервер в интернете
Здравствуйте, очень интересный сайт у вас, начинаю изучать android и достаточно подробно у вас здесь все написано. Спасибо за труды! Скажите, а что нужно чтобы программа записывала в базу данных несколько номеров (бесконечное количество контактов) а не только один. Спасибо!
''Если нужно не сохранять значение, а добавлять в базу, то нужно вызвать функцию .createNewTable