database and sql sayan unankard 7 - maejo universityitsci.mju.ac.th/sayan/it411/slides/it411_07...

17
www.itsci.mju.ac.th/sayan DATABASE AND SQL SAYAN UNANKARD 7

Upload: others

Post on 10-Aug-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

www . i t s c i .m ju . ac . t h / sayan

DATABASE AND SQL SAYAN UNANKARD

7

Page 2: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

DATABASE คืออะไร?

Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์ จะถูกแยกจัดเก็บออกเป็นหน่วยย่อย ๆ ที่เรียกว่ารีเลชัน (Relation) หรือโดยทั่วไปเรียกว่าตารางแบบ 2 มิติ (two-dimensional table) ข้อมูลจะถูกเก็บในรูปแบบของตาราง ซึ่งภายในตารางจะแบ่งออกเป็น แถว และคอลัมน์

2

Page 3: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

ข้อมูลอยู่ที่ไหนบน ANDROID?

ระบบฐานข้อมูลสามารถถูกจัดเก็บได้หลายที่ ขึ้นอยู่กับขนาดของฐานข้อมูล• ภายในเครื่องมือถือ Android เรียกว่า local database

• บน remote web server เครื่องเดียว

• กระจายอยู่บน remote web server หลายๆ ตัว หรือ บน cloud

3

Page 4: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

SQL DATABASES IN ANDROID

โดยทั่วไป Android จะใช้ระบบฐานข้อมูลที่ถูกฝังมากับระบบปฏิบัติการเรียกว่า SQLite ซึ่งสามารถใช้งานได้หลากหลายค าสั่ง ได้แก่ • create a database

• define SQL tables

• Indices

• Queries

• Views

• Triggers

• Insert/Delete/Update rows

• administer a SQLite database file

4

Page 5: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

USING SQLITE

• SQLite พัฒนามาจากมาตรฐาน SQL-92 standard

• สนับสนุนการท างานของ triggers บางส่วน และ สามารถท า complex queries (ยกเว้นouter joins)

• SQLITE ไม่ได้พัฒนาในส่วนของ referential integrity constraints ผ่านตัว foreign key constraint model

• SQLite เป็น relaxed data typing model คือ ไม่ได้เป็นการก าหนดชนิดของข้อมูลส าหรับแต่ละคอลัมน์ แต่เป็นชนิดข้อมูลส าหรับค่าแต่ละค่า ดังนั้นมีโอกาสที่จะป้อนข้อมูล String ในคอลัมน์ที่เป็นตัวเลขได้

• Documentation on SQLITE available at http://www.sqlite.org/docs.html

5

Page 6: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

HOW TO USE A SQLITE DATABASE?

6

Page 7: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

STORAGE CLASSES AND DATATYPES

แต่ละค่าจะถูกจัดเก็บตามรูปแบบคลาสดังนี้• NULL จัดเก็บค่า NULL

• INTEGER จัดเก็บค่าตัวเลขจ านวนเต็ม จ านวน 1, 2, 3, 4, 6, หรือ 8 bytes ขึ้นอยู่กับค่าตัวเลข

• REAL จัดเก็บค่าตัวเลขทศนิยม จ านวน 8-byte IEEE floating point number

• TEXT จัดเก็บข้อความ string โดยมีการเข้ารหัส database encoding (UTF-8, UTF-16BE หรือ UTF-16LE)

• BLOB จัดเก็บข้อมูลแบบ Binary Large Object

7

Page 8: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

CREATE SQLite DATABASE

สร้าง DatabaseHelper Class ส าหรับสร้างฐานข้อมูล โดยสืบทอดคุณสมบัติมาจากคลาส SQLiteOpenHelper จะต้อง implements constructor และ เมธอด onCreate() และ onUpgrade()

8

package com.example.sayan.lec8;

...

public class DatabaseHelper extends SQLiteOpenHelper {

private static String DB_NAME = "it411db";

public DatabaseHelper(Context context) {

super(context, DB_NAME, null, 1);

}

@Override

public void onCreate(SQLiteDatabase db) {

String sql = "Create Table IF NOT EXISTS Student (StuID TEXT PRIMARY KEY,

StuName TEXT, Email TEXT)";

db.execSQL(sql);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("Drop Table if exists Student");

this.onCreate(db);

}

}

สร้างตาราง Student ในฐานข้อมูล it411db

ลบตาราง Student ออกจากฐานข้อมูล it411db

Page 9: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

การเรียกใช้ คลาส DatabaseHelper

การเรียกใช้ สามารถเรียกใช้ใน MainActivity ในเมธอด onCreate()

9

public class MainActivity extends AppCompatActivity {

private DatabaseHelper myDB;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

myDB = new DatabaseHelper(this);

}

}

new object ของ DatabaseHelper

Page 10: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

INSERT RECORD

ในส่วนของการเพิ่มข้อมูลเข้าสู่ฐานข้อมูล สามารถเรียกใช้ค าสั่ง insert(ชื่อตาราง, Null คอลัมน,์ ค่าที่ต้องการเพิ่ม)

10

public boolean addStudent(Student student) {

long result = -1;

try {

SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("StuID", student.getStuID());

values.put("StuName", student.getStuName());

values.put("Email", student.getEmail());

// Inserting Row

result = db.insert("Student", null, values);

db.close(); // Closing database connection

}catch (Exception ex) {

ex.printStackTrace();

}

if (result == -1) {

return false;

}else{

return true;

}

}

ก าหนดให้บันทึกข้อมูลได้

ระบุค่าที่ต้องการเพิ่มใน ContentValues

เรียกใช้ค าสั่ง insert

boolean result = myDB.addStudent(new Student("560001", "Sayan", "[email protected]"));

การเรียกใช้งาน

Page 11: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

public boolean updateStudent(Student student) {

long result = -1;

try {

SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("StuID", student.getStuID());

values.put("StuName", student.getStuName());

values.put("Email", student.getEmail());

// Updating Row

result = db.update("Student", values, "StuID = ?",

new String[] {student.getStuID()});

db.close(); // Closing database connection

}catch (Exception ex) {

ex.printStackTrace();

}

if (result == -1) {

return false;

}else{

return true;

}

}

UPDATE RECORD

ในส่วนของการแก้ไขข้อมูล สามารถเรียกใช้ค าสั่ง update(ชื่อตาราง, ค่าที่ต้องการแก้ไข, ค าสั่ง where, พารามิเตอร์ที่ระบุใน where)

11

เรียกใช้ค าสั่ง update

boolean result = myDB.updateStudent(new Student("560001", "Sayan", "[email protected]"));

การเรียกใช้งาน

Page 12: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

ในส่วนของการลบข้อมูล สามารถเรียกใช้ค าสั่ง delete(ชื่อตาราง, ค าสั่ง where, พารามิเตอร์ที่ระบุใน where)

DELETE RECORD

12

public boolean deleteStudents(String stuid) {

long result = -1;

try {

SQLiteDatabase db = this.getWritableDatabase();

// Deleting Row

result = db.delete("Student", "StuID = ?", new String[] {stuid});

db.close(); // Closing database connection

}catch (Exception ex) {

ex.printStackTrace();

}

if (result == -1) {

return false;

}else{

return true;

}

}

เรียกใช้ค าสั่ง delete

boolean result = myDB.deleteStudent("560001");

การเรียกใช้งาน

Page 13: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

ในส่วนของการอ่านข้อมูล สามารถเรียกใช้ค าสั่ง rawQuery(ค าสั่ง sql, พารามิเตอร์ส าหรับค าสั่ง where) โดยตัวที่น ามารับค่าคือตัวแปร Cursor โดยสามารถใช้ค าสั่ง moveToFirst เพื่อเลื่อนต าแหน่งของ cursor ไปข้อมูลแถวแรกได้

SELECT RECORD

13

public Student getStudent(String stuid) {

Student stu = new Student();

SQLiteDatabase db = this.getWritableDatabase();

Cursor cursor = db.rawQuery("Select StuID, StuName, Email from Student

Where Stuid = ?", new String[] {stuid});

if (cursor != null) {

cursor.moveToFirst();

stu = new Student(cursor.getString(0),cursor.getString(1),

cursor.getString(2));

}

db.close();

return stu;

}

เรียกใช้ค าสั่ง rawQuery

Student stu = myDB.getStudent("560001");

การเรียกใช้งาน

Page 14: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

public List<Student> getStudents() {

List<Student> list = new ArrayList<Student>();

SQLiteDatabase db = this.getWritableDatabase();

Cursor cursor = db.rawQuery("Select StuID, StuName, Email from Student", null);

if (cursor != null) {

cursor.moveToFirst();

do {

Student stu = new Student(cursor.getString(0), cursor.getString(1),

cursor.getString(2));

list.add(stu);

}while (cursor.moveToNext());

}

db.close();

return list;

}

ในส่วนของการอ่านข้อมูลหลายแถว สามารถเรียกใช้ค าสั่ง rawQuery(ค าสั่ง sql, พารามิเตอร์ส าหรับค าสั่ง where) โดยตัวที่น ามารับค่าคือตัวแปร Cursor โดยสามารถใช้ค าสั่ง moveToFirst(), moveToNext() เพื่อเลื่อนต าแหน่งของ cursor ได้

SELECT MULTIPLE RECORDS

14

เรียกใช้ค าสั่ง rawQuery

ใช้ค าสั่ง do…while ในการหมุน loop cursor

List<Student> list = myDB.getStudents();

การเรียกใช้งาน

Page 15: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

WHERE IS MY SQLite DATABASE STORED?

เมื่อรันโปรแกรม เราสามารถดูว่าฐานข้อมูลของเราสร้างไว้ที่ไหน โดยเลือกที่ View -> Tool Windows -> Device File Explorer ฐานข้อมูลของ app ที่เราสร้างจะอยู่ใน data -> data -> ชื่อ app -> databases

15

Page 16: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

DB BROWSER FOR SQLITE

https://sqlitebrowser.org/

16

Page 17: DATABASE AND SQL SAYAN UNANKARD 7 - Maejo Universityitsci.mju.ac.th/sayan/it411/slides/IT411_07 Database and SQL.pdf · database คืออะไร? Relational Database = ข้อมูลที่จัดเก็บอยู่ในฐานข้อมูลที่มีโครงสร้างข้อมูลในแบบเชิงสัมพันธ์

SQLite MANAGER ADD-ON FOR FIREFOX

สามารถติดตั้ง SQLite Manager Add-on ส าหรับ Firefox เพื่อดูตารางและข้อมูลในฐานข้อมูลได้

17