บทนำ: SQLite ใน Android
SQLite เป็นฐานข้อมูล SQL แบบโอเพนซอร์ส จัดเก็บข้อมูลในไฟล์ข้อความบนอุปกรณ์ Android มีการรองรับในตัว ไม่ต้องเชื่อมต่อแบบ JDBC/ODBC
ตัวอย่าง: ดึงข้อมูลที่ถูกแก้ไขใน 1 ชั่วโมงล่าสุด
ตัวอย่างนี้สาธิตวิธีคิวรี่ข้อมูลที่มี timestamp อยู่ในช่วง 1 ชั่วโมงย้อนหลัง
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
Android Studio → File → New Project → กรอกรายละเอียด → Finish
ขั้นตอนที่ 2: Layout (res/layout/activity_main.xml)
Layout เหมือนตัวอย่างก่อนหน้า: EditText ชื่อ/เงินเดือน, ปุ่ม Save/Refresh/Update/Delete All, ListView
ขั้นตอนที่ 3: MainActivity.java
โค้ด MainActivity เหมือนตัวอย่างก่อนหน้าทุกประการ ต่างกัน فقطที่คิวรี่ใน DatabaseHelper
ขั้นตอนที่ 4: DatabaseHelper.java - คิวรี่ 1 ชั่วโมงล่าสุด
public ArrayList<String> getAllContacts() {
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<String> array_list = new ArrayList<>();
// 'now' = ปัจจุบัน, '-1 hour' = ย้อนหลัง 1 ชั่วโมง
Cursor res = db.rawQuery(
"SELECT (id || ' : ' || name || ' : ' || salary || ' : ' || datetime) AS fullname " +
"FROM " + CONTACTS_TABLE_NAME +
" WHERE datetime >= DATE('now', '-1 hour')",
null
);
res.moveToFirst();
while (!res.isAfterLast()) {
array_list.add(res.getString(res.getColumnIndex("fullname")));
res.moveToNext();
}
return array_list;
}
คำอธิบายคิวรี่
DATE('now', '-1 hour') คืนค่าวันที่/เวลา 1 ชั่วโมงก่อนหน้านี้
'now'= เวลาปัจจุบัน'-1 hour'= ลบ 1 ชั่วโมง
เงื่อนไข datetime >= ... จะดึงเฉพาะแถวที่ถูกสร้าง/แก้ไขในชั่วโมงล่าสุด
หมายเหตุเพิ่มเติม
- SQLite ใช้ UTC เป็นค่าเริ่มต้น หากต้องการเวลาท้องถิ่น ให้ใช้
'now', 'localtime' - คอลัมน์ datetime ต้องมีรูปแบบที่ SQLite เข้าใจได้ (ISO8601: YYYY-MM-DD HH:MM:SS)
- ในโค้ดตัวอย่างใช้
DEFAULT CURRENT_TIMESTAMPซึ่งจะบันทึกเป็น UTC
ผลลัพธ์
ListView แสดงเฉพาะรายการที่เพิ่งเพิ่ม/แก้ไขใน 1 ชั่วโมงที่ผ่านมา