Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีค้นหาตารางที่ถูกแก้ไขในชั่วโมงล่าสุดใน Android SQLite

บทนำ: 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 ชั่วโมงที่ผ่านมา