วิธีการเรียกดูข้อมูล SQLite จาก Emulator
บทความนี้จะพูดถึงเรื่องเกี่ยวกับ SQLite นะครับ เนื่องจากว่าหลายๆคนสงสัยว่า เมื่อเราพัฒนาแอพพลิเคชันแอนดรอยส์ แล้วเชื่อมต่อข้อมูลกับ SQLite แล้ว
- ข้อมูลเราจะถูกจัดเก็บไว้ที่ไหน?
- เราสามารถดูข้อมูลได้อย่างไร?
- สามารถทดสอบ เพิ่ม/ลบ/แก้ไขข้อมูลเองได้มั้ย โดยไม่ต้องผ่านการเขียนโปรแกรม?
- มีโปรแกรม GUI แนะนำมั้ย?
ทั้งหมดนี้มีคำตอบอยู่ในบทความนี้ครับ :)
สำหรับบทความเกี่ยวกับ sqlite บน Android ผมได้ทำการเขียนบทความไว้ก่อนหน้านี้ 2 บทความ สามารถเข้าไปอ่านเพิ่มเติมได้ที่
วิธีการดูข้อมูล SQLite ด้วยการใช้ Android Shell
สิ่งที่เราจะใช้คือตัว adb (Android Debug Bridge) ซึ่งมีอยู่ใน Android SDK ที่เราได้ลงไป
path/to/your/android-sdk/platform-tools/
วิธีการคือ ไปที่โฟลเดอร์ของ adb จากนั้นทำการเรียกดูรายชื่อเครื่อง device ทั้งหมดที่เราสามารถจะ debug ได้ (ต้องทำการ start Emulator ก่อน) ด้วยคำสั่ง
cd path/to/your/android-sdk/platform-tools
adb devices
จะเห็นรายชื่อ devices ขึ้นมาดังนี้
List of devices attached
emulator-5556 device
Note: หากเป็น Platform Windows จะเป็น
adb.exe devices
- ทำการ remote shell เข้าไปยังเครื่อง device ด้วยคำสั่ง
adb -s emulator-5556 shell
โดยที่ -s <avd name\>
: หมายถึงว่าเข้าถึงเครื่อง device โดยระบุชื่อเครื่องต่อท้าย -s (ชื่อเครื่องเป็นชื่อเดียวกันกับในขั้นตอนที่ 2)
- เมื่อ access เข้ามาแล้ว เราจะไปที่ path ของ database ในเครื่อง Android กัน โดยปกติฐานข้อมูลจะถูกเก็บไว้ที่
data/data/PACKAGE_NAME/databases/DATABASE_NAME.db
โดยเปลี่ยนโฟลเดอร์ไปที่data/data/
และเมื่อดูรายชื่อไฟล์/โฟลเดอร์ทั้งหมดในนี้ ฐานข้อมูลทุกแอพจะถูกเก็บไว้ที่นี้โดยจัดหมวดหมู่ตาม package name ของแอพ สำหรับตัวอย่างคือใช้ฐานข้อมูลใน packagecom.devahoy.sample.ahoysqlite
และฐานข้อมูลชื่อว่าdevahoy_friends.db
root@android:/ # cd /data/data
ls
cd com.devahoy.sample.ahoysqlite/databases
- จากนั้นทำการ start sqlite3 (เป็น Tools สำหรับจัดการ sqlite) ด้วยคำสั่ง
sqlite3 <DB_NAME>
ดังนี้
sqlite3 devahoy_friends.db
เมื่อ start sqlite3 ได้ จะเจอหน้าจอแบบนี้
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
เพียงเท่านี้เราก็สามารถที่จะดูข้อมูล / อัพเดท / แก้ไข / ลบข้อมูล sqlite ในเครื่อง Android Emulator ได้แล้ว สำหรับการใช้คำสั่งใน sqlite3 ต้องขึ้นต้นด้วย . (dot) และจบ statement ด้วย ; (semicolon) สุดท้าย การออกจาก sqlite3 ทำได้ด้วยคำสั่ง .exit
Note: รายละเอียดการใช้งานสามารถพิมพ์
.help
เพื่อดูรายละเอียดเพิ่มเติมได้
คำสั่งและใช้งาน SQLite เบื้องต้น
ส่วนนี้จะเป็นการใช้งาน SQL Statement เบื้องต้น ซึ่งใน sqlite ก็แทบจะเหมือนกับ RDMS ตัวอื่นๆ เช่น MySQL
แบบรวบรัด
.tables
: สำหรับเรียกดูรายชื่อ table ทั้งหมดในฐานข้อมูล- create table :
create table TABLE_NAME ();
- insert :
insert into TABLE_NAME() values ();
- select :
select * from TABLE_NAME;
- update :
update TABLE_NAME set column1='new_value' where [condition];
- delete :
delete from TABLE_NAME where [condition];
สร้างตาราง (Table)
การสร้าง table ในโปรแกรมเราจะใช้เมธอด execSQL()
ผ่านคลาส SQLiteDatabase
แต่ว่าคำสั่งของ SQL มันมีรูปแบบดังนี้
create table TABLE_NAME (column type, column2 type)
เช่น
create table blogs (id integer primary key autoincrement, title text, url text);
เพิ่มข้อมูล (Insert)
โดยปกติในแอพ Android เราใช้คำสั่ง insert ผ่านคลาส SQLiteDatabase
ด้วยเมธอด insert()
แต่ว่าคำสั่งจริงๆ ก็เหมือนกับการใช้ sql statement ทั่วๆไป ในรูปแบบ
insert into TABLE_NAME (column1, column2) values('xxx', 'xxx');
เช่น
sqlite> insert into blogs (title, url) values ('DevAhoy', 'https://devahoy.com');
sqlite> insert into blogs (title, url) values ('Sleeping for Less', 'http://www.akexorcist.com');
sqlite> insert into blogs (title, url) values ('NuuNeoi', 'http://nuuneoi.com');
sqlite> insert into blogs (title, url) values ('MasterUng', 'http://androidthai.in.th');
sqlite> insert into blogs (title, url) values ('Treasure', 'https://www.google.co.th');
เรียกดูข้อมูล (Query/Select)
เหมือนกับการ insert ใน Android เราใช้เมธอด query()
หรือ rawQuery()
ผ่านคลาส SQLiteDatabase
เพื่อทำการเรียกดูข้อมูล แต่ว่าทั่วๆไป การใช้งาน sql statement ก็ทำได้ในรูปแบบนี้
select * from TABLE_NAME;
select column1 from TABLE_NAME;
เช่น ทำการเรียกดูข้อมูลทั้งหมดใน table blogs
select * from blogs;
จะมีรายชื่อของ blogs ขึ้นมาดังนี้
1|DevAhoy|https://devahoy.com
2|Sleeping for Less|http://www.akexorcist.com
3|NuuNeoi|http://nuuneoi.com
4|MasterUng|http://androidthai.in.th
5|Treasure|https://www.google.co.th
แก้ไขข้อมูล (Update)
ใน SQLiteDatabase
มีเมธอด update()
ไว้ให้สำหรับอัพเดทข้อมูล หากใช้ statement จะอยู่ในรูปแบบ
update TABLE_NAME SET column1 = value1, column2 = value2 where [condition];
เช่น ทำการอัพเดท Treasure
update blogs SET title='Guru', url='https://www.google.co.th' where title='Treasure';
ลอง query ดูข้อมูลอีกครั้ง จะเห็นว่าข้อมูลได้เปลี่ยนตามที่เราอัพเดทแล้ว
ลบข้อมูล (Delete)
ใน SQLiteDatabase
มีเมธอด delete()
ไว้สำหรับช่วยให้ลบข้อมูล แต่หากใช้ SQL Statement จะอยู่ในรูปแบบ
delete from TABLE_NAME where [condition];
เช่น ต้องการลบข้อมูล ที่ title ชื่อว่า 'Guru'
delete from blogs where title='Treasure';
ลอง query ดู จะเห็นว่าข้อมูลถูกลบออกไปแล้ว
Note: โปรดระวังการใช้
update
และdelete
ให้ดี เพราะหากคุณลืมใส่ condition ให้มัน นั่นหมายความว่ามันจะ update/delete ข้อมูลคุณทั้งหมดเลย :)
ดึงข้อมูลจาก Emulator มาไว้บนเครื่องคอม
ทำได้ 2 วิธีคือ การใช้ adb pull
และการใช้ Android Device Monitor
- ใช้
adb pull
เพื่อดึงข้อมูลจากเครื่อง Emulator มาลงที่เครื่องคอม ด้วยคำสั่ง
adb pull /data/data/PACKAGE_NAME/DATABASE_NAME
Note: อย่าลืม หากว่ามีเครื่อง Device ที่รันอยู่มากกว่า 1 เครื่อง ต้องทำการระบุเครื่องเวลา access adb ด้วย
adb -s emulator-5556
- ใช้ Android Device Monitor โดยการกดที่ Shortcut Icon ตรง menu หรือว่า Tools => Android => Android Device Monitor จากเลือก เลือกเครื่อง device => เลือกไปที่แท็ป File Explorer แล้วก็ browse ไปยังที่อยู่ของฐานข้อมูล จากนั้นกด Pull a file from the device
ทีนี้เมื่อเรามีไฟล์ฐานข้อมูลในเครื่องคอมแล้ว วิธีการจะดูก็สามารถดูผ่าน sqlite3 ที่อยู่ในโฟลเดอร์ path/to/android-sdk/tools
ก็ได้ หรือจะใช้ GUI ชื่อว่า DB Browser for SQLite ตามด้านล่างเลย
ดูข้อมูล SQLite ด้วย DB Browser for SQLite
DB Browser for SQLite เป็นโปรแกรมที่มีหน้าตา User Interface แบบเรียบง่าย ที่ช่วยให้เราจัดการกับฐานข้อมูล SQLite ได้แบบง่าย สำหรับคนที่ไม่ชอบคำสั่ง command line สามารถดาวน์โหลดได้จากหน้าเว็บไซต์ได้เลย DB Browser for SQLite
เมื่อทดลองเปิด ฐานข้อมูลตัวเดียวกันที่สร้างผ่าน sqlite3 แบบ command line จะเห็นว่าข้อมูลเหมือนกัน ดูรายละเอียดอะไรได้ง่ายกว่า เพิ่ม/ลบ ข้อมูลได้ง่ายๆผ่านปุ่ม New Record/ Delete Record หรือหากใครที่ยังชอบใช้แบบ Execute SQL ก็สามารถทำได้เช่นกันคับ ลองไปโหลดมาเล่นกันดูนะครับ :)
- Authors
- Name
- Chai Phonbopit
- Website
- @Phonbopit