Android
2 комментария Как работать с базой данных 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 передавать данные на сервер в интернете
















Метки:
admin
Просмотров: 24 870
Запись опубликована в 11:39
Здравствуйте, очень интересный сайт у вас, начинаю изучать android и достаточно подробно у вас здесь все написано. Спасибо за труды! Скажите, а что нужно чтобы программа записывала в базу данных несколько номеров (бесконечное количество контактов) а не только один. Спасибо!
''Если нужно не сохранять значение, а добавлять в базу, то нужно вызвать функцию .createNewTable