วิธีการเรียกดูข้อมูล SQLite จาก Emulator

Published on
Android
2015/01/how-to-debug-sqlite-database-in-emulator
Discord

บทความนี้จะพูดถึงเรื่องเกี่ยวกับ SQLite นะครับ เนื่องจากว่าหลายๆคนสงสัยว่า เมื่อเราพัฒนาแอพพลิเคชันแอนดรอยส์ แล้วเชื่อมต่อข้อมูลกับ SQLite แล้ว

  • ข้อมูลเราจะถูกจัดเก็บไว้ที่ไหน?
  • เราสามารถดูข้อมูลได้อย่างไร?
  • สามารถทดสอบ เพิ่ม/ลบ/แก้ไขข้อมูลเองได้มั้ย โดยไม่ต้องผ่านการเขียนโปรแกรม?
  • มีโปรแกรม GUI แนะนำมั้ย?

ทั้งหมดนี้มีคำตอบอยู่ในบทความนี้ครับ :)

สำหรับบทความเกี่ยวกับ sqlite บน Android ผมได้ทำการเขียนบทความไว้ก่อนหน้านี้ 2 บทความ สามารถเข้าไปอ่านเพิ่มเติมได้ที่

วิธีการดูข้อมูล SQLite ด้วยการใช้ Android Shell

  1. สิ่งที่เราจะใช้คือตัว adb (Android Debug Bridge) ซึ่งมีอยู่ใน Android SDK ที่เราได้ลงไป path/to/your/android-sdk/platform-tools/

  2. วิธีการคือ ไปที่โฟลเดอร์ของ 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

  1. ทำการ remote shell เข้าไปยังเครื่อง device ด้วยคำสั่ง
adb -s emulator-5556 shell

โดยที่ -s <avd name\> : หมายถึงว่าเข้าถึงเครื่อง device โดยระบุชื่อเครื่องต่อท้าย -s (ชื่อเครื่องเป็นชื่อเดียวกันกับในขั้นตอนที่ 2)

  1. เมื่อ access เข้ามาแล้ว เราจะไปที่ path ของ database ในเครื่อง Android กัน โดยปกติฐานข้อมูลจะถูกเก็บไว้ที่ data/data/PACKAGE_NAME/databases/DATABASE_NAME.db โดยเปลี่ยนโฟลเดอร์ไปที่ data/data/ และเมื่อดูรายชื่อไฟล์/โฟลเดอร์ทั้งหมดในนี้ ฐานข้อมูลทุกแอพจะถูกเก็บไว้ที่นี้โดยจัดหมวดหมู่ตาม package name ของแอพ สำหรับตัวอย่างคือใช้ฐานข้อมูลใน package com.devahoy.sample.ahoysqlite และฐานข้อมูลชื่อว่า devahoy_friends.db
root@android:/ # cd /data/data
ls
cd com.devahoy.sample.ahoysqlite/databases
  1. จากนั้นทำการ 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

  1. ใช้ adb pull เพื่อดึงข้อมูลจากเครื่อง Emulator มาลงที่เครื่องคอม ด้วยคำสั่ง
adb pull /data/data/PACKAGE_NAME/DATABASE_NAME

Note: อย่าลืม หากว่ามีเครื่อง Device ที่รันอยู่มากกว่า 1 เครื่อง ต้องทำการระบุเครื่องเวลา access adb ด้วย adb -s emulator-5556

  1. ใช้ Android Device Monitor โดยการกดที่ Shortcut Icon ตรง menu หรือว่า Tools => Android => Android Device Monitor จากเลือก เลือกเครื่อง device => เลือกไปที่แท็ป File Explorer แล้วก็ browse ไปยังที่อยู่ของฐานข้อมูล จากนั้นกด Pull a file from the device

Pull a file

ทีนี้เมื่อเรามีไฟล์ฐานข้อมูลในเครื่องคอมแล้ว วิธีการจะดูก็สามารถดูผ่าน 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

SQLite Browser

เมื่อทดลองเปิด ฐานข้อมูลตัวเดียวกันที่สร้างผ่าน sqlite3 แบบ command line จะเห็นว่าข้อมูลเหมือนกัน ดูรายละเอียดอะไรได้ง่ายกว่า เพิ่ม/ลบ ข้อมูลได้ง่ายๆผ่านปุ่ม New Record/ Delete Record หรือหากใครที่ยังชอบใช้แบบ Execute SQL ก็สามารถทำได้เช่นกันคับ ลองไปโหลดมาเล่นกันดูนะครับ :)

SQLite Browser

Buy Me A Coffee
Authors
Discord