Top Banner
1 RĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte Informācijas tehnoloģiju institūts Mācību priekšmets “Lielu datu bāzu tehnoloģija Java mobilā lietojuma izveidošana Izstrādāja: Zane Magone 3. kurss
19

Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un...

Mar 20, 2018

Download

Documents

duongdung
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

1

RĪGAS TEHNISKĀ UNIVERSITĀTE

Datorzinātnes un informācijas tehnoloģijas fakultāte

Informācijas tehnoloģiju institūts

Mācību priekšmets

“Lielu datu bāzu tehnoloģija ”

Java mobilā lietojuma izveidošana

Izstrādāja: Zane Magone

3. kurss

2013. gads

Saturs

Page 2: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

2

Uzdevums.......................................................................................................3

1. Ievads.......................................................................................................4

2. Izveidotais projekts un tā pirmkods.........................................................5

3. Rezultāti.................................................................................................13

4. Secinājumi..............................................................................................15

Page 3: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

3

Uzdevums

1.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT);

2.Izveidot un aprakstīt nepieciešamās klases un metodes, lai izmantojot JAVA valodas SQLite bibliotēku, tiktu izveidota datubāze ar divām tabulām, tajās varētu ievadīt datus, kuriem varētu adresēt vienkāršu vaicājumu, kas izmanto abu tabulu datus un izvada rezultātu uz ekrāna.

3.Atkļūdot un instalēt lietojumu, pārbaudīt lietojuma rezultātu uz fiziskas Android ierīces.

Page 4: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

4

1. Ievads

Praktiski visiem mobilajiem lietojumiem ir nepieciešamība glabāt datus, kas saglabātos arī pēc lietojuma apturēšanas, un kuriem varētu piekļūt pēc lietojuma darbības atsākšanas. Tam ir paredzētas vairākas iespējas- nestrukturētus datus vienkāršāk glabāt teksta failos, ļoti primitīviem datiem var izmantot Shared preferences klasi, taču šāda pieeja, palielinoties datu apjomam kļūst arvien neefektīvāka. Strukturētus datu iespējams glabāt attālināti uz servera, taču tā kā lietojumiem ne vienmēr ir iespēja savienoties ar serveri, liela daļa mobilo lietojumu, kuri izmanto apjomīgus, strukturētus datus, glabā savus datus, izmantojot Android.database un Android.database.sqlite bibliotēku piedāvātās iespējas, lai nodrošinātu vismaz daļēju datu buferizāciju.

SQLite ir relāciju datubāzes vadības sistēma, kas pievienota JAVA valodai kā importējama bibliotēka, nodrošinot galvenās klases un funkcijas datubāzu un tabulu apstrādei. SQLite galvenā priekšrocība ir tā, ka tā nav atsevišķs process, pie kura vēršas lietojums, bet gan integrēta tā daļa. SQLite tiek izmantota situācijās, kad lietojums izveido, uztur un apstrādā pats savu privāto datubāzi, tā veidojot iekļauto (embedded) datubāzi neaizņemot daudz cietā diska atmiņas un nenoslogojot operatīvo atmiņu, tieši tāpēc tā ir tik praktiska mobilajiem lietojumiem.

Praktiskajā darbā tiks izveidots Android lietojums sqlite_demo, kas izmantojot JAVA valodu un SQLite importētās bibliotēkas, izveidos datubāzi no divām tabulām un demonstrēs vienkāršu SQL vaicājuma rezultāta izvadi uz ekrāna..

Page 5: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

5

2. Izveidotais projekts un tā pirmkods

Izmantojot IDE Eclipse paplašinājumu ADT tika izveidots jauns projekts sqlite_demo. Projekta pakotnē ietilps 5 JAVA klases, XML fails activitydemo.xml, kurš nosaka galvenās aktivitātes (DemoActivity) vizuālo atspoguļojumu ierīcē, un visi automātiski ģenerētie faili, kas netika mainīti.

Klases Course.java un Student.java apraksta mācību kursa un studentu objektus, un definēt vienkāršas metodes, kas nodrošina datu piešķiršanu un iegūšanu no objekta:

Studenta objektam ir 3 atribūti – ID, vārds un mācību kursa ID. Klases Student.java pirmkods:

package com.example.sqlite_demo;

public class Student { int _id; String _name; int _course; public Student(){

Page 6: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

6

} public Student(int id, String name, int course){ this._id = id; this._name = name; this._course = course; } public int getID(){ return this._id; } public void setID(int id){ this._id = id; } public String getName(){ return this._name; } public void setName(String name){ this._name = name; } public int getCourse(){ return this._course; } public void setCourse(int course){ this._course = course; }}

Līdzīgi objektam kurss arī ir ID un kursa nosaukums. Klases Course.java pirmkods:

package com.example.sqlite_demo;

public class Course {

int _id; String _name;

public Course(){}

public Course(int id, String name){ this._id = id; this._name = name; }

Page 7: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

7

public int getID(){ return this._id; } public void setID(int id){ this._id = id; } public String getName(){ return this._name; } public void setName(String name){ this._name = name; } }

Klase CourseStudent.java tika izveidota, tikai tāpēc, lai vieglāk apstrādātu un izvadītu vaicājuma rezultātu, kurā būs lauki no divām tabulām:

package com.example.sqlite_demo;

public class CourseStudent { String _course_name; String _student_name; public CourseStudent(){ }

public CourseStudent(String course_name, String student_name){ this._course_name = course_name; this._student_name = student_name; } public String getSName(){ return this._student_name; }

public void setSName(String student_name){ this._student_name = student_name; }

public String getCName(){ return this._course_name; } public void setCName(String course_name){ this._course_name = course_name;

Page 8: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

8

} }

Klase, kas nodrošina, datubāzes, tabulu izveidi, vaicājumus un visas pārējās nepieciešamās darbības ir DatabaseHandler.java, kas arī izmanto iepriekšminētās SQLite bibliotēkas:

package com.example.sqlite_demo;

// imported classesimport java.util.ArrayList;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; public class DatabaseHandler extends SQLiteOpenHelper { // All Static variables // Database Version private static final int DATABASE_VERSION = 1; // Database Name private static final String DATABASE_NAME = "StudentDemoDatabase"; // tables name private static final String TABLE_STUDENTS = "students"; private static final String TABLE_COURSES = "courses"; // students table column names private static final String KEY_ID = "id"; private static final String KEY_NAME = "name"; private static final String KEY_COURSE = "course"; // course table column names private static final String COURSE_KEY_ID = "id"; private static final String COURSE_KEY_NAME = "name"; // constructor calling super class public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }

Page 9: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

9

// overriden function onCreate database @Override public void onCreate(SQLiteDatabase db) { String CREATE_COURSES_TABLE = "CREATE TABLE "+TABLE_COURSES + "(" + COURSE_KEY_ID + " INTEGER PRIMARY KEY," + COURSE_KEY_NAME + " TEXT)"; db.execSQL(CREATE_COURSES_TABLE); // executes SQL query to create courses table String CREATE_STUDENTS_TABLE = "CREATE TABLE " + TABLE_STUDENTS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + KEY_COURSE + " TEXT" + ")"; db.execSQL(CREATE_STUDENTS_TABLE); // executes SQL query to create students table } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Drop older tables if exist db.execSQL("DROP TABLE IF EXISTS " + TABLE_STUDENTS); db.execSQL("DROP TABLE IF EXISTS " + TABLE_COURSES); // Create tables again onCreate(db); } // Adding new contact public void addStudent(Student student) { SQLiteDatabase db = this.getWritableDatabase(); //getting database ContentValues values = new ContentValues(); values.put(KEY_ID, student.getID()); values.put(KEY_NAME, student.getName()); values.put(KEY_COURSE, student.getCourse()); db.insert(TABLE_STUDENTS, null, values); // Inserting Row db.close(); // Closing database connection } // Adding new course public void addCourse(Course course) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COURSE_KEY_ID, course.getID()); values.put(COURSE_KEY_NAME, course.getName());

Page 10: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

10

db.insert(TABLE_COURSES, null, values); // Inserting Row db.close(); // Closing database connection } // Getting All Students public List<Student> getAllStudents() { List<Student> studentList = new ArrayList<Student>(); String selectQuery = "SELECT * FROM " + TABLE_STUDENTS; // Select All Query SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); //executing query, defining cursor // loop through all rows if (cursor.moveToFirst()) { do { Student student = new Student(); student.setID(Integer.parseInt(cursor.getString(0))); student.setName(cursor.getString(1)); student.setCourse(Integer.parseInt(cursor.getString(2))); studentList.add(student); // Adding student to list } while (cursor.moveToNext()); } return studentList; // returning results as list } // Getting All Courses public List<Course> getAllCourses() { List<Course> courseList = new ArrayList<Course>(); String selectQuery = "SELECT * FROM " + TABLE_COURSES; // Select All Query SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); //executing query, defining cursor // loop through all rows if (cursor.moveToFirst()) { do { Course course = new Course(); course.setID(Integer.parseInt(cursor.getString(0))); course.setName(cursor.getString(1)); courseList.add(course);// Adding contact to list } while (cursor.moveToNext()); }

return courseList; // returning results as list } // Selecting public List<CourseStudent> getCourseStudent(String courseName) { List<CourseStudent> courseStudentList = new ArrayList<CourseStudent>();

Page 11: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

11

// Select Query that returns student name, course name, for course id which was given as parameter to function getCourseStudent String selectQuery = "SELECT students.name, courses.name FROM courses, students " + " WHERE (courses.id = students.course) and (courses.name='" + courseName+"')"; SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); if (cursor.moveToFirst()) { do { CourseStudent courseStudent = new CourseStudent(); courseStudent.setSName(cursor.getString(0)); courseStudent.setCName(cursor.getString(1)); courseStudentList.add(courseStudent); } while (cursor.moveToNext()); } return courseStudentList; // returning results as list

}

Klasei ir divas funkcijas, kas pievieno datus izveidotajās tabulās:

addStudent(Student student)- pievieno jaunu studentu. addCourse(Course course)- pievieno jaunu kursu.

Klasei ir trīs funkcijas, kas izgūst datus no datubāzes:

getAllCourses(), funkcija kas iegūst visus laukus no tabulas courses un atgriež tos kā sarakstu (List)

getAllStudents(), funkcija kas iegūst visus laukus no tabulas students un atgriež tos kā sarakstu (List)

getCourseStudent(String courseName), funkcija, kas saņemto virknes (string) tipa mainīgo izmanto SELECT vaicājumā, lai atlasītu studentu uzvārdus, kuri mācās šajā kursā:

"SELECT students.name, courses.name FROM courses, students " + " WHERE (courses.id = students.course) and (courses.name='" + courseName+"')"

Klase, kas ir galvenā aktivitāte un tiek uzsākta izvēloties lietojumu ir DemoActivity:

package com.example.sqlite_demo;

import com.example.sqlite_demo.R;import android.os.Bundle;import android.app.Activity;

Page 12: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

12

import java.util.List;import android.widget.TextView;

public class DemoActivity extends Activity {

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo); DatabaseHandler db = new DatabaseHandler(this); db.addStudent(new Student (1,"Magone", 3)); db.addStudent(new Student(2,"Puķe",2)); db.addStudent(new Student(3, "Lapa",3)); String log=""; List<Student> students = db.getAllStudents(); for (Student st : students) { log = log+ " \n Id: "+st.getID()+", Name: " + st.getName() + ", Course: " + st.getCourse(); } TextView selection = (TextView) findViewById(R.id.tv); selection.setText(log); db.addCourse(new Course (1,"Matemātika")); db.addCourse(new Course (2,"Angļu valoda")); db.addCourse(new Course (3,"Lielas datubāzes")); String log2=""; List<Course> courses = db.getAllCourses(); for (Course cr : courses) { log2 = log2+ " \n Id: "+cr.getID()+", Name: " + cr.getName(); } TextView selection2 = (TextView) findViewById(R.id.tv2); selection2.setText(log2); String log3=""; List<CourseStudent> courseStudents = db.getCourseStudent("Lielas datubāzes"); for (CourseStudent cs : courseStudents) { log3 = log3+ " \n Student name: "+cs.getSName()+", Course name: " + cs.getCName(); } List<CourseStudent> courseStudents2 = db.getCourseStudent("Angļu valoda"); for (CourseStudent cs : courseStudents2) { log3 = log3+ " \n Student name: "+cs.getSName()+", Course name: " + cs.getCName(); } TextView selection3 = (TextView) findViewById(R.id.tv3); selection3.setText(log3);

Page 13: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

13

}}

Šī klase izmantojot DatabaseHandler funkcijas, pievieno trīs ierakstus studentu tabulā un mācību kursu tabulā, pēc tam izmanto funkcijas, kuras izgūst visus datus no tabulām un pēc tam divas reizes izsauc funkciju getCourseStudent ar dažādām parametru vērtībām. Tā kā visus rezultātus izsauktās funkcijas atgriežas saraksta veidā, tad šie dati tiek pārvērsti string tipa mainīgajā un izvadīti uz ekrāna izmantojot TextView elementus, kas ir definēti xml failā.

Activity_demo.xml fails, kurš apraksta vizuālo izvietojumu:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="3" ><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv2" android:layout_weight="1" android:textSize="32sp" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:layout_weight="1" android:textSize="32sp" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv3" android:layout_weight="1" android:textSize="32sp" />

</LinearLayout>

Failā tiek definēti trīs TextView – tv, tv2, tv3 elementi, kas ir vienlīdzīgi sadalīti pa visu ekrānu un ir piesaistīti katrs savam string tipa mainīgajam, lai attēlotu rezultātus uz ekrāna.

3. Rezultāti

Pēc atkļūdošanas lietojums tika instalēts ierīcē Galaxy Tab N8010, izmantojot debug režīmu no ADT.

Page 14: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

14

Sqlite_demo veiksmīgi pievienots lietojumu izvēlnē.

Rezultāts pēc lietojuma atvēršanas:

Pēc iegūtā rezultāta redzams, ka lietojums darbojas kā iecerēts.

Page 15: Saturs Web view · 2014-11-191.Izveidot jaunu lietojuma projektu Eclipse IDE paplašinājumā Android Development Tools (ADT); 2.Izveidot un aprakstīt nepieciešamās klases un metodes,

15

4. Secinājumi

Darbā tika iegūtas praktiskas iemaņas ar SQLite pielietojumu Android lietojumos. Lai gan iegūtais rezultāts ir ļoti vienkāršs un neliels, uzlabojot un papildinot tabulas un funkcijas, var iegūt nopietnāku datubāzi, kuras izstrādes laiks noteikti attaisnos iegūto rezultātu.

Lai nodrošinātu datu apstrādi ar funkcijām, katrai tabulai tiek veidota atbilstoša klase;

Katrs pievienotais ieraksts tiek uztverts kā objekts ar atribūtiem, kuri tiek pārveidoti, lai tiktu izmantoti vai iegūti no SQL vaicājuma;

Jāseko, lai SQL vaicājumos, kuri tiek saglabāti string tipa mainīgajā, un kuros izmanto vaicājuma tekstu +mainīgos, pēc teksta vienmēr sekotu tukšumzīmes, citādāk radīsies sintakse kļūdas un lietojums pārstās darboties;

ADT, kas ir speciāli pielāgots Android ļauj ļoti ātri atkļūdot projektu no kompilācijas kļūdām un LogCat logs, kas reģistrē visus notikumus lietojumā izpildoties uz fiziskas ierīces, palīdz ātri atrast loģiskās kļūdas lietojumā.

Lietojuma izstrādes gaitā, kad projektā bija palikušas dažas loģiskās kļūdas, lietojums instalējas uz ierīces virsū iepriekšējai instalācijai, taču lietojuma dati tika saglabāti, tādējādi kļūdainā datubāze nevarēja tikt nodzēsta no lietojuma un radās kļūda, kuras cēlonis nebija atrodams projektā. Problēma tika atrisināta, pēc tam kad tika nodzēsti lietojuma dati no ierīces un lietojums pārinstalēts pilnīgi no jauna.

Pieredzes trūkuma dēļ neizdevās izveidot listView izvadi uz ekrāna, tāpēc tika izmantoti trīs textView elementi.