Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра ЕОМ
Лабораторна робота №5
з дисципліни: «Мережні операційні системи»
на тему: «Управління даними в ОС Android за допомогою СУБД SQLite»
Львів – 2017
Мета: Оволодіти навичками роботи з СУБД SQLite в ОС Android.
Завдання:
Створити базу даних навчальних предметів біжучого семестру (назва предмету, обсяг предмету (навчальні години), викладач, розклад, показники успішності) та тестову програму перегляду і редагування записів бази даних.
Основні методи для роботи з SQLite в ОС Android:
execSQL(String st):
виклик запиту для бази даних; st – сам SQL запит.
insert(String table, String nullColumnHack, ContentValues values):
додавання запису до таблиці.
update(String table, ContentValues values, String whereClause, String[] whereArgs):
обнова запису в базі даних
delete(String table, String whereClause, String[] whereArgs):
видалення строки в базі даних
rawQuery(String sql, String[] selectionArgs);
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy):
виконання SQL запитів. Повертає елемент Cursor.
Робоча програма створює базу даних та таблицю автоматично. Ми працюємо із цією таблицею. Є можливість додати дані, видалити їх, переглянути та редагувати. Деякі з скрінів роботи програми зображено нижче.
Рис. 1. Головна сторінка програми
Рис. 2. Розділ «Перегляд інформації про предмет»
Лістинг:
Subjects.java
package com.knowleen.lab5and;
public class Subjects {
private int id;
private String subject;
private int hours;
private String teacher;
private String days;
private int marks;
public Subjects(){}
public Subjects(String s, int h, String t, String d, int m) {
super();
this.subject = s;
this.hours = h;
this.teacher = t;
this.days = d;
this.marks = m;
}
//getters & setters
@Override
public String toString() {
return "Предмет: " + subject + "\nГодин: " + hours + "\nВикладач: " + teacher +
"\nНавчальні дні: " + days + "\nСередня оцінка: " + marks;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public String getSubject() {
return subject;
}
public String getDays() {
return days;
}
public String getTeacher() {
return teacher;
}
public int getHours() {
return hours;
}
public int getMarks() {
return marks;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setHours(int hours) {
this.hours = hours;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
public void setDays(String days) {
this.days = days;
}
public void setMarks(int marks) {
this.marks = marks;
}
}
DataBaseHelper.java
package com.knowleen.lab5and;
import java.util.LinkedList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseHelper extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "SubjectsDB3";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// SQL statement to create table
String CREATE_SUBJ_TABLE = "CREATE TABLE subj ( " +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"subject TEXT, "+
"hours INTEGER, "+"teacher TEXT, "+"days TEXT, "+
"marks INTEGER )";
// create table
db.execSQL(CREATE_SUBJ_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS subj");
// create fresh table
this.onCreate(db);
}
//---------------------------------------------------------------------
// Name of table
private static final String TABLE_SUBJECTS = "subj";
// Columns
private static final String KEY_ID = "id";
private static final String KEY_SUBJECT = "subject";
private static final String KEY_HOURS = "hours";
private static final String KEY_TEACHER = "teacher";
private static final String KEY_DAYS = "days";
private static final String KEY_MARKS = "marks";
private static final String[] COLUMNS = {KEY_ID,KEY_SUBJECT,KEY_HOURS,KEY_TEACHER,KEY_DAYS,KEY_MARKS};
public void addSubject(Subjects subjects){
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
values.put(KEY_SUBJECT, subjects.getSubject());
values.put(KEY_HOURS, subjects.getHours());
values.put(KEY_TEACHER, subjects.getTeacher());
values.put(KEY_DAYS, subjects.getDays());
values.put(KEY_MARKS, subjects.getMarks());
// 3. insert
db.insert(TABLE_SUBJECTS, // table
null, //nullColumnHack
values); // key/value -> keys = column names/ values = column values
// 4. close
db.close();
}
public Subjects getSubject(int id){
// 1. get reference to readable DB
SQLiteDatabase db = this.getReadableDatabase();
// 2. build query
Cursor cursor =
db.query(TABLE_SUBJECTS, // a. table
COLUMNS, // b. column names
" id = ?", // c. selections
new String[] { String.valueOf(id) }, // d. selections args
null, // e. group by
null, // f. having
null, // g. order by
null); // h. limit
// 3. if we got results get the first one
if (cursor != null)
cursor.moveToFirst();
// 4. build object
Subjects subjects = new Subjects();
subjects.setId(Integer.parseInt(cursor.getString(0)));
subjects.setSubject(cursor.getString(1));
subjects.setHours(Integer.parseInt(cursor.getString(2)));
subjects.setTeacher(cursor.getString(3));
subjects.setDays(cursor.getString(4));
subjects.setMarks(Integer.parseInt(cursor.getString(5)));
// 5. return
return subjects;
}
public Subjects getSubject(String name){
// 1. get reference to readable DB
SQLiteDatabase db = this.getReadableDatabase();
// 2. build query
Cursor cursor =
db.query(TABLE_SUBJECTS, // a. table
COLUMNS, // b. column names
" subject = ?", // c. selections
new String[] { name }, // d. selections args
null, // e. group by
null, // f. having
null, // g. order by
null); // h. limit
// 3. if we got results get the first one
if (cursor != null)
cursor.moveToFirst();
// 4. build object
Subjects subjects = new Subjects();
subjects.setId(Integer.parseInt(cursor.getString(0)));
subjects.setSubject(cursor.getString(1));
subjects.setHours(Integer.parseInt(cursor.getString(2)));
subjects.setTeacher(cursor.getString(3));
subjects.setDays(cursor.getString(4));
subjects.setMarks(Integer.parseInt(cursor.getString(5)));
return subjects;
}
// Get All
public List<Subjects> getAll() {
List<Subjects> subjectses = new LinkedList<Subjects>();
// 1. build the query
String query = "SELECT * FROM " + TABLE_SUBJECTS;
// 2. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
// 3. go over each row, build and add it to list
Subjects subjects = null;
if (cursor.moveToFirst()) {
do {
subjects = new Subjects();
subjects.setId(Integer.parseInt(cursor.getString(0)));
subjects.setSubject(cursor.getString(1));
subjects.setHours(Integer.parseInt(cursor.getString(2)));
subjects.setTeacher(cursor.getString(3));
subjects.setDays(cursor.getString(4));
subjects.setMarks(Integer.parseInt(cursor.getString(5)));
// Adding
subjectses.add(subjects);
} while (cursor.moveToNext());
}
// return sub
return subjectses;
}
// Updating
public int updateSubject(Subjects subjects, String name) {
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
values.put(KEY_SUBJECT, subjects.getSubject());
values.put(KEY_HOURS, subjects.getHours());
values.put(KEY_TEACHER, subjects.getTeacher());
values.put(KEY_DAYS, subjects.getDays());
values.put(KEY_MARKS, subjects.getMarks());
// 3. updating row
int i = db.update(TABLE_SUBJECTS, //table
values, // column/value
KEY_SUBJECT+" = ?", // selections
new String[] { name }); //selection args
// 4. close
db.close();
return i;
}
public void deleteSubject(String name) {
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. delete
db.delete(TABLE_SUBJECTS,
KEY_SUBJECT+" = ?",
new String[] { name });
// 3. close
db.close();
}
// Deleting
public void deleteSubject(Subjects subjects) {
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. delete
db.delete(TABLE_SUBJECTS,
KEY_ID+" = ?",
new String[] { String.valueOf(subjects.getId()) });
// 3. close
db.close();
}
// making spinner items
public String[] makeSpinnet(){
String query = "SELECT * FROM " + TABLE_SUBJECTS;
int i;
// 2. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
cursor.moveToFirst();
i = 0;
//making array to write spinner item's
String[] result = new String[cursor.getCount()];
cursor.moveToFirst();
do {
result[i] = cursor.getString(1);
i++;
} while (cursor.moveToNext());
return result;
}
}
StartActivity.java
package com.knowleen.lab5and;
import android.content.Intent;
public class StartActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
}
public void addSub(View view) {
Intent intent = new Intent(this, AddSubject.class);
startActivity(intent);
}
public void delSub(View view) {
Intent intent = new Intent(this, DeleteSubject.class);
startActivity(intent);
}
public void watchSub(View view) {
Intent intent = new Intent(this, WatchSubject.class);
startActivity(intent);
}
public void editSub(View view) {
Intent intent = new Intent(this, EditSubject.class);
startActivity(intent);
}
}
AddSubject.java
package com.knowleen.lab5and;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class AddSubject extends AppCompatActivity {
EditText subject, hours, teacher, days, marks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_subject);
subject = (EditText) findViewById(R.id.editText2);
hours = (EditText) findViewById(R.id.editText3);
teacher = (EditText) findViewById(R.id.editText5);
days = (EditText) findViewById(R.id.editText7);
marks = (EditText)findViewById(R.id.editText8);
}
public void adding(View view) {
DatabaseHelper db = new DatabaseHelper(this);
db.addSubject(new Subjects(subject.getText().toString(), Integer.parseInt(hours.getText().toString()),
teacher.getText().toString(), days.getText().toString(), Integer.parseInt(marks.getText().toString())));
Toast.makeText(this, "Предмет додано!", Toast.LENGTH_LONG).show();
subject.setText("");
hours.setText("");
teacher.setText("");
days.setText("");
marks.setText("");
}
}
DeleteSubject.java
package com.knowleen.lab5and;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import org.w3c.dom.Text;
public class DeleteSubject extends AppCompatActivity {
String data = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_delete_subject);
DatabaseHelper db = new DatabaseHelper(this);
//адаптер для випадаючого меню
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, db.makeSpinnet());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
// натиск на пункт з випадаючого меню
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
//пишемо назву елементу
data = adapter.getItem(position);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
//видаляємо елемент по назві
public void deleting(View view) {
DatabaseHelper db = new DatabaseHelper(this);
db.deleteSubject(data);
Toast.makeText(this, "Предмет видалено!", Toast.LENGTH_LONG).show();
this.recreate();
}
}
EditSubject.java
package com.knowleen.lab5and;
import android.support.v7.app.AppCompatActivity;
public class EditSubject extends AppCompatActivity {
EditText subject, hours, teacher, days, marks;
String data = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_subject);
subject = (EditText) findViewById(R.id.editText2);
hours = (EditText) findViewById(R.id.editText3);
teacher = (EditText) findViewById(R.id.editText5);
days = (EditText) findViewById(R.id.editText7);
marks = (EditText)findViewById(R.id.editText8);
final DatabaseHelper db = new DatabaseHelper(this);
//адаптер для випадаючого меню
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, db.makeSpinnet());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner) findViewById(R.id.spinner5);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
//пишемо назву елементу
data = adapter.getItem(position);
Subjects sub = db.getSubject(data);
subject.setText(sub.getSubject());
hours.setText(String.valueOf(sub.getHours()));
teacher.setText(sub.getTeacher());
days.setText(sub.getDays());
marks.setText(String.valueOf(sub.getMarks()));
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
public void editing(View view) {
DatabaseHelper db = new DatabaseHelper(this);
db.updateSubject(new Subjects(subject.getText().toString(), Integer.parseInt(hours.getText().toString()),
teacher.getText().toString(), days.getText().toString(), Integer.parseInt(marks.getText().toString())), data);
Toast.makeText(this, "Зміну внесено!", Toast.LENGTH_LONG).show();
this.recreate();
}
}
WatchSubject.java
package com.knowleen.lab5and;
import android.support.v7.app.AppCompatActivity;
public class WatchSubject extends AppCompatActivity {
TextView tx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_watch_subject);
tx = (TextView) findViewById(R.id.textView);
final DatabaseHelper db = new DatabaseHelper(this);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, db.makeSpinnet());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner) findViewById(R.id.spinner2);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
tx.setText(db.getSubject(adapter.getItem(position)).toString());
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
}
Висновок. В даній лабораторній роботі ознайомився із SQLite в Android, навчився користуватися основними командами цієї СУБД в Android. Також закріпив свої знання створивши тестову програму.