Управління даними в Android за допомогою СУБД SQLite

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
Комп'ютерна інженерія
Кафедра:
ЕОМ

Інформація про роботу

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Мережеві операційні системи
Група:
КІ 41

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Лабораторна робота №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. Для управления базой данных SQLite существует класс SQLiteDatabase. В классе SQLiteDatabase определены методы query(), insert(), delete() и update() для чтения, добавления, удаления, изменения данных. Кроме того, метод execSQL() позволяет выполнять любой допустимый код на языке SQL применимо к таблицам базы данных, если вы хотите провести эти (или любые другие) операции вручную. Каждый раз, когда вы редактируете очередное значение из базы данных, нужно вызывать метод refreshQuery() для всех курсоров, которые имеют отношение к редактируемой таблице. Для составления запроса используются два метода: rawQuery() и query(), а также класс SQLiteQueryBuilder. Лістинг тестової програми: MainActivity.java public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { final String LOG_TAG = "MainActivity"; private static final int CM_DELETE_ID = 1; ListView listView; Database database; SimpleCursorAdapter scAdapter; FloatingActionButton addSubjectFAB, addMobileFAB; Dialog subjectDialog; EditText subjectName, teacherName, subjectHours, subjectSuccess; Button addSubjectDialogButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); addSubjectFAB = (FloatingActionButton) findViewById(R.id.subjectDB); addSubjectFAB.setIcon(R.mipmap.ic_school); subjectDialog = new Dialog(MainActivity.this); subjectDialog.setTitle(R.string.subjectDB); subjectDialog.setContentView(R.layout.subject_dialog); subjectName = (EditText) subjectDialog.findViewById(R.id.subject_name); teacherName = (EditText) subjectDialog.findViewById(R.id.subject_teacher); subjectHours = (EditText) subjectDialog.findViewById(R.id.subject_hours); subjectSuccess = (EditText) subjectDialog.findViewById(R.id.subject_success); addSubjectDialogButton = (Button) subjectDialog.findViewById(R.id.addSubjectDialogButton); addMobileFAB = (FloatingActionButton) findViewById(R.id.mobileOperatingSystemsDB); addMobileFAB.setIcon(R.mipmap.ic_cellphone_android); // відкриваємо підключення до БД database = new Database(this); database.open(); // формуємо стовпці співставлення String[] from = new String[]{Database.SUBJECT_NAME, Database.SUBJECT_TEACHER, Database.SUBJECT_HOURS, Database.SUBJECT_SUCCESS}; int[] to = new int[]{R.id.item_subject_name, R.id.item_subject_teacher, R.id.item_subject_hours, R.id.item_subject_success}; // створюємо адаптер і налаштовуємо список scAdapter = new SimpleCursorAdapter(this, R.layout.subject_item, null, from, to, 0); listView = (ListView) findViewById(R.id.subjects_database_lv); listView.setAdapter(scAdapter); // додаємо контекстне меню до списку registerForContextMenu(listView); // створюємо loader для читання данних getSupportLoaderManager().initLoader(0, null, this); addSubjectFAB.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { subjectDialog.show(); } }); addSubjectDialogButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { subjectDialog.dismiss(); // отримуємо дані з полей вводу String name = subjectName.getText().toString(); String teacher = teacherName.getText().toString(); String hours = subjectHours.getText().toString(); String success = subjectSuccess.getText().toString(); // додаємо запис database.addRec(name, teacher, hours, success + "%"); // отримуємо новий курсор з даними getSupportLoaderManager().getLoader(0).forceLoad(); Toast.makeText(getApplicationContext(), "Додано у БД", Toast.LENGTH_SHORT).show(); // очищаємо поля в діалозі subjectName.setText(null); teacherName.setText(null); subjectHours.setText(null); subjectSuccess.setText(null); } }); } public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add(0, CM_DELETE_ID, 0, R.string.delete); } public boolean onContextItemSelected(MenuItem item) { if (item.getItemId() == CM_DELETE_ID) { // отримуємо з пункту контекстного меню дані по пункту списку AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); // отримуємо id запису і видаляємо відповідний запис у БД database.delRec(acmi.id); // отримуємо новий курсор з даними getSupportLoaderManager().getLoader(0).forceLoad(); return true; } return super.onContextItemSelected(item); } protected void onDestroy() { super.onDestroy(); // закриваємо підключення до БД перед виходом database.close(); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle bndl) { return new MyCursorLoader(this, database); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { scAdapter.swapCursor(cursor); } @Override public void onLoaderReset(Loader<Cursor> loader) { } static class MyCursorLoader extends CursorLoader { Database db; public MyCursorLoader(Context context, Database db) { super(context); this.db = db; } @Override public Cursor loadInBackground() { Cursor cursor = db.getAllData(); return cursor; } } } Database.java public class Database { final String LOG_TAG = "Database"; // Ім'я БД private static final String DATABASE_NAME = "mydb"; // Версія БД private static final int DATABASE_VERSION = 1; // Таблиці БД private static final String SUBJECTS_TABLE = "subjects"; private static final String MOBILE_OS_TABLE = "mobos"; // Стовпці таблиці навчальних предметів public static final String SUBJECT_ID = "_id"; public static final String SUBJECT_NAME = "name"; public static final String SUBJECT_TEACHER = "teacher"; public static final String SUBJECT_HOURS = "hours"; public static final String SUBJECT_SUCCESS = "success"; // Стовпці таблиці мобільних ОС public static final String MOBILE_OS_ID = "_id"; public static final String MOBILE_OS_NAME = "os"; public static final String MOBILE_OS_VERSION = "version"; public static final String MOBILE_OS_COMPANY = "company"; public static final String MOBILE_OS_MARKET = "market"; // Стоврення таблиці навчальних предметів private static final String CREATE_SUBJECTS_TABLE = "CREATE TABLE " + SUBJECTS_TABLE + "(" + SUBJECT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + SUBJECT_NAME + " TEXT," + SUBJECT_TEACHER + " TEXT," + SUBJECT_HOURS + " TEXT," + SUBJECT_SUCCESS + " TEXT" + ")"; private static final String CREATE_MOBILE_OS_TABLE = "CREATE TABLE " + MOBILE_OS_TABLE + "(" + MOBILE_OS_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + MOBILE_OS_NAME + " TEXT," + MOBILE_OS_VERSION + " TEXT," + MOBILE_OS_COMPANY + " TEXT," + MOBILE_OS_MARKET + " TEXT" + ")"; private final Context mCtx; private DBHelper mDBHelper; private SQLiteDatabase mDB; public Database(Context ctx) { mCtx = ctx; } // відкрити підключення public void open() { mDBHelper = new DBHelper(mCtx, DATABASE_NAME, null, DATABASE_VERSION); mDB = mDBHelper.getWritableDatabase(); } // закрити підключення public void close() { if (mDBHelper != null) mDBHelper.close(); } // отримати всі дані з таблиці навчальних предметів public Cursor getAllData() { return mDB.query(SUBJECTS_TABLE, null, null, null, null, null, null); } // отримати всі дані з таблиці мобільних ОС public Cursor getAllDataMobile() { return mDB.query(MOBILE_OS_TABLE, null, null, null, null, null, null); } // додати запис у таблицю навчальних предметів public void addRec(String name, String teacher, String hours, String success) { ContentValues cv = new ContentValues(); cv.put(SUBJECT_NAME, name); cv.put(SUBJECT_TEACHER, teacher); cv.put(SUBJECT_HOURS, hours); cv.put(SUBJECT_SUCCESS, success); mDB.insert(SUBJECTS_TABLE, null, cv); } // видалити запис з таблиці навчальних предметів public void delRec(long id) { mDB.delete(SUBJECTS_TABLE, SUBJECT_ID + " = " + id, null); } // клас по створенню і управлінню БД private class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } // створюємо БД @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_SUBJECTS_TABLE); ContentValues cv = new ContentValues(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } } main.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fab="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" 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"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/subjects_database" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/subjectDB" android:textStyle="bold" /> <ListView android:id="@+id/subjects_database_lv" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> <TextView android:id="@+id/mobile_database" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="@string/mobileDB" android:textStyle="bold" /> <ListView android:id="@+id/mobile_database_lv" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> </LinearLayout> <com.getbase.floatingactionbutton.FloatingActionsMenu android:id="@+id/multiple_actions" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="16dp" fab:fab_addButtonColorNormal="#303F9F" fab:fab_addButtonColorPressed="#3F51B5" fab:fab_addButtonPlusIconColor="#ffffff"> <com.getbase.floatingactionbutton.FloatingActionButton android:id="@+id/subjectDB" android:layout_width="wrap_content" android:layout_height="wrap_content" fab:fab_colorNormal="#303F9F" fab:fab_colorPressed="#3F51B5" fab:fab_size="normal"> </com.getbase.floatingactionbutton.FloatingActionButton> <com.getbase.floatingactionbutton.FloatingActionButton android:id="@+id/mobileOperatingSystemsDB" android:layout_width="wrap_content" android:layout_height="wrap_content" fab:fab_colorNormal="#303F9F" fab:fab_colorPressed="#3F51B5" fab:fab_size="normal"> </com.getbase.floatingactionbutton.FloatingActionButton> </com.getbase.floatingactionbutton.FloatingActionsMenu> </FrameLayout> subject_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/item_subject_name_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:gravity="center_vertical" android:text="Предмет: " /> <TextView android:id="@+id/item_subject_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/item_subject_teacher_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:gravity="center_vertical" android:text="Викладач: " /> <TextView android:id="@+id/item_subject_teacher" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/item_subject_hours_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:gravity="center_vertical" android:text="Години: " /> <TextView android:id="@+id/item_subject_hours" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center_vertical" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/item_subject_success_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:gravity="center_vertical" android:text="Успішність: " /> <TextView android:id="@+id/item_subject_success" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center_vertical" /> </LinearLayout> </LinearLayout> </LinearLayout> subject_dialog.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" android:orientation="vertical"> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/subject_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/subject_name" android:inputType="textCapSentences" android:textStyle="bold" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/subject_teacher" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/teacher" android:inputType="textCapSentences" android:textStyle="bold" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/subject_hours" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/subject_time" android:inputType="textCapSentences" android:textStyle="bold" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/subject_success" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/success" android:inputType="textCapSentences" android:textStyle="bold" /> </android.support.design.widget.TextInputLayout> <Button android:id="@+id/addSubjectDialogButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/add" /> </LinearLayout> // Висновок: На цій лабораторній роботі я оволодів навичками роботи з СУБД SQLite в ОС Android.
Антиботан аватар за замовчуванням

30.12.2015 03:12-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!