Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра ЕОМ
/
Лабораторна робота №5
з предмету:
«Мережні операційні системи»
на тему:
«Управління даними в ОС Android за допомогою СУБД SQLite»
Мета роботи: Оволодіти навичками роботи з СУБД SQLite в ОС Android.
Теоретичні відомості:
SQLite - це база даних з відкритими вихідними кодами, що включається за замовчуванням до складуАндроїд. SQLite підтримує стандартні можливості реляційних баз даних - синтаксис, транзакції і prepared statements. Крім SQLite вимагає дуже невеликої кількості пам'яті для роботи (приблизно 250 кб). Використання SQLite в Андроїд не вимагає установки БД або адміністрування. Ви вказуєте SQL-запит для роботи з БД і необхідні операції адміністрування виконуються автоматично. Робота з базами даних в Андроїд може бути повільної через операцій введення / виводу, тому всі необхідні операції рекомендується виконувати за допомогою класу AsyncTask (тобто в фоні). SQLite підтримує типи даних TEXT (схожий з String в Java), INTEGER (схожий з long в Java) і REAL (схожий з double в Java). Всі інші типи даних повинні бути сконвертовані в один з цих перед збереженням в базу даних. SQLite сам по собі не перевіряє, чи відповідають записані дані типом даних відповідного стовпця, ви можете записати ціле число в стовпець з типом Integer. Якщо ваш додаток створює базу даних, вона зберігається в папці «DATA / data / APP_NAME / databases / FILENAME». DATA - це шлях, що повертається методом Environment.getDataDirectory (), APP_NAME - ім'я вашого застосування і FILENAME - це ім'я, яке ви даєте базі даних при створенні. Environment.getDataDirectory () зазвичай повертає SD-карту в якості місця. База даних SQLite доступна тільки додатком, яке створює її. Якщо ви хочете дати доступ до даних іншим програмам, ви можете використовувати ContentProvider.
Лістинг тестової програми:
MainActivity.java
package ua.mos.lab5;
import java.io.File;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
private static final String DATABASE_NAME = "BODJA.db";
private SQLiteDatabase mDatabase;
public static final String KEY_ID = "id";
public static final String KEY_OS = "OS";
public static final String KEY_OWNER = "owner";
public static final String KEY_VERSION = "version";
public static final String KEY_PRODAG = "prodag";
public static final String KEY_NOTE = "note";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File database=getApplicationContext().getDatabasePath(DATABASE_NAME);
if (!database.exists()) {
// Database does not exist so copy it from assets here
mDatabase = openOrCreateDatabase(DATABASE_NAME,
SQLiteDatabase.CREATE_IF_NECESSARY, null);
//create TABLE
//mDatabase.execSQL("DROP TABLE IF EXISTS " + "bodja");
String createTabl = "CREATE TABLE bodja(id INTEGER PRIMARY KEY AUTOINCREMENT,OS TEXT,owner TEXT,version TEXT,prodag TEXT,note TEXT)";
mDatabase.execSQL(createTabl);
mDatabase.close();
EditText ed_id = (EditText)findViewById(R.id.editText1);
ed_id.setText("BD created!!!");
}
}
public void Save_Click(View view)
{
//boolean isBDopen = mDatabase.isOpen();
mDatabase = openOrCreateDatabase(DATABASE_NAME,SQLiteDatabase.OPEN_READWRITE, null);
EditText ed_id = (EditText)findViewById(R.id.editText1);
EditText ed_OS = (EditText)findViewById(R.id.editText2);
EditText ed_owner = (EditText)findViewById(R.id.editText3);
EditText ed_version = (EditText)findViewById(R.id.editText4);
EditText ed_prodag = (EditText)findViewById(R.id.editText5);
EditText ed_note = (EditText)findViewById(R.id.editText6);
long b = createTodo(ed_OS.getText().toString(),ed_owner.getText().toString(),ed_version.getText().toString(),
ed_prodag.getText().toString(),ed_note.getText().toString());
ed_id.setText(Long.toString(b));
//close BD
mDatabase.close();
}
public void View_Click(View view)
{
mDatabase = openOrCreateDatabase(DATABASE_NAME,SQLiteDatabase.OPEN_READWRITE, null);
int rowCount = getRowsCount();
EditText ed_id = (EditText)findViewById(R.id.editText1);
EditText ed_OS = (EditText)findViewById(R.id.editText2);
EditText ed_owner = (EditText)findViewById(R.id.editText3);
EditText ed_version = (EditText)findViewById(R.id.editText4);
EditText ed_prodag = (EditText)findViewById(R.id.editText5);
EditText ed_note = (EditText)findViewById(R.id.editText6);
int bodja = Integer.parseInt(ed_id.getText().toString());
if(bodja<=0 || bodja>rowCount)
{
AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Warning");
alertDialog.setMessage("Hе правильний ID");
alertDialog.show();
ed_id.setText("");
}
else
{
Cursor input = fetchTodo(bodja);
String temp = input.getString( input.getColumnIndex("OS") );
ed_OS.setText(temp);
ed_owner.setText(input.getString(input.getColumnIndex("owner")));
ed_version.setText(input.getString(input.getColumnIndex("version")));
ed_prodag.setText(input.getString(input.getColumnIndex("prodag")));
ed_note.setText(input.getString(input.getColumnIndex("note")));
}
mDatabase.close();
}
public void Edit_Click(View view)
{
mDatabase = openOrCreateDatabase(DATABASE_NAME,SQLiteDatabase.OPEN_READWRITE, null);
int rowCount = getRowsCount();
EditText ed_id = (EditText)findViewById(R.id.editText1);
EditText ed_OS = (EditText)findViewById(R.id.editText2);
EditText ed_owner = (EditText)findViewById(R.id.editText3);
EditText ed_version = (EditText)findViewById(R.id.editText4);
EditText ed_prodag = (EditText)findViewById(R.id.editText5);
EditText ed_note = (EditText)findViewById(R.id.editText6);
int bodja = Integer.parseInt(ed_id.getText().toString());
if(bodja<=0 || bodja>rowCount)
{
AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Warning");
alertDialog.setMessage("Hе правильний ID");
alertDialog.show();
ed_id.setText("");
}
else
{
ContentValues base = createContentValues(ed_OS.getText().toString(),ed_owner.getText().toString(),ed_version.getText().toString(),
ed_prodag.getText().toString(),ed_note.getText().toString());
String strFilter = "id=" + ed_id.getText().toString();
mDatabase.update("bodja", base, strFilter, null);
AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Message");
alertDialog.setMessage("Значення успішно оновлено");
alertDialog.show();
}
mDatabase.close();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public long createTodo(String a, String b,
String c, String d, String e){
ContentValues initialValues = createContentValues(a,b,c,d,e);
return mDatabase.insert("bodja", null, initialValues);
}
private ContentValues createContentValues(String a, String b,
String c, String d, String e) {
ContentValues values = new ContentValues();
values.put(KEY_OS, a);
values.put(KEY_OWNER, b);
values.put(KEY_VERSION, c);
values.put(KEY_PRODAG, d);
values.put(KEY_NOTE, e);
return values;
}
public int getRowsCount() {
String countQuery = "SELECT * FROM " + "bodja";
Cursor cursor = mDatabase.rawQuery(countQuery, null);
return cursor.getCount();
}
public Cursor fetchTodo(long rowId) throws SQLException {
Cursor mCursor = mDatabase.query(true, "bodja", new String[] {
KEY_OS, KEY_OWNER, KEY_VERSION, KEY_PRODAG, KEY_NOTE },
KEY_ID + "=" + String.valueOf(rowId), null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
}
main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/button3"
android:layout_below="@+id/button3"
android:layout_marginTop="14dp"
android:ems="10"
android:inputType="number" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button3"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="20dp"
android:text="Переглянути"
android:onClick="View_Click"/>
<Button
android:id="@+id/button2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/editText1"
android:layout_toRightOf="@+id/button3"
android:text="Змінити"
android:onClick="Edit_Click"/>
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/editText1"
android:layout_toRightOf="@+id/button2"
android:text="Зберегти"
android:onClick="Save_Click"/>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText1"
android:layout_toLeftOf="@+id/button1"
android:ems="10" />
<EditText
android:id="@+id/editText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_toLeftOf="@+id/button1"
android:ems="10" />
<EditText
android:id="@+id/editText4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText3"
android:layout_toLeftOf="@+id/button1"
android:ems="10" />
<EditText
android:id="@+id/editText5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText4"
android:layout_toLeftOf="@+id/button1"
android:ems="10" />
<EditText
android:id="@+id/editText6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText5"
android:layout_toLeftOf="@+id/button1"
android:ems="10" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editText2"
android:layout_alignBottom="@+id/editText2"
android:layout_alignLeft="@+id/button1"
android:text="ОС" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editText1"
android:layout_alignBottom="@+id/editText1"
android:layout_toRightOf="@+id/editText1"
android:text="ID"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editText3"
android:layout_alignBottom="@+id/editText3"
android:layout_toRightOf="@+id/editText3"
android:text="Власник" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editText4"
android:layout_alignBottom="@+id/editText4"
android:layout_toRightOf="@+id/editText4"
android:text="Поточна версія" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editText5"
android:layout_alignBottom="@+id/editText5"
android:layout_toRightOf="@+id/editText5"
android:text="Продаж, [%]" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editText6"
android:layout_alignBottom="@+id/editText6"
android:layout_toRightOf="@+id/editText6"
android:text="Примітка" />
</RelativeLayout>
Результати виконання програми:
/ /
/
Висновок: На цій лабораторні роботі я оволодів навичками роботи з СУБД SQLite в ОС Android.