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

วิธีใช้ LONGTEXT ใน Android SQLite

บทนำ: LONGTEXT ใน SQLite

LONGTEXT เป็นคีย์เวิร์ดที่ SQLite รับเพื่อความเข้ากันได้กับ MySQL แมปไปที่ TEXT Affinity เหมือน MEDIUMTEXT/TINYTEXT

ตัวอย่าง: ใช้ LONGTEXT สำหรับคอลัมน์ name

ขั้นตอนที่ 1-3: โปรเจกต์, Layout, MainActivity

โครงสร้างเดียวกับตัวอย่าง SQLite ก่อนหน้า

ขั้นตอนที่ 4: DatabaseHelper.java - ใช้ LONGTEXT

@Override
public void onCreate(SQLiteDatabase db) {
    try {
        db.execSQL("CREATE TABLE " + CONTACTS_TABLE_NAME +
            "(id INTEGER PRIMARY KEY, name LONGTEXT, salary BIGINT(8), datetime DEFAULT CURRENT_TIMESTAMP)");
    } catch (SQLiteException e) {
        try { throw new IOException(e); } 
        catch (IOException e1) { e1.printStackTrace(); }
    }
}

LONGTEXT ใน SQLite vs MySQL

คุณสมบัติMySQLSQLite
ขนาดสูงสุด4,294,967,295 ตัวอักษร (~4GB)ไม่มีข้อจำกัดเฉพาะ (ขึ้นกับ RAM/Storage)
AffinityTEXTTEXT
Performanceมี overhead สำหรับขนาดใหญ่จัดเก็บแบบต่อเนื่องใน B-tree

SQLite ไม่มีข้อจำกัดขนาดจริง

  • ขนาดสูงสุดของ Row: ~1GB (SQLITE_MAX_LENGTH default 1,000,000,000)
  • สามารถปรับได้ด้วย PRAGMA max_page_count และ page_size
  • ในทางปฏิบัติ: จำกัดโดยพื้นที่เก็บข้อมูลและหน่วยความจำ

เมื่อไหร่ใช้ LONGTEXT?

  • Porting จาก MySQL ที่ใช้ LONGTEXT
  • ทีมคุ้นเคยกับคำศัพท์ MySQL
  • ใน SQLite ใช้ TEXT ธรรมดาได้ผลเหมือนกัน

ตัวอย่างข้อมูลขนาดใหญ่

// JSON ขนาดใหญ่
String largeJson = "{\"data\":[" + "\"item\"," .repeat(10000) + "]}";
helper.insert(largeJson, "100000");

ข้อแนะนำ Best Practices

  1. ใช้ TEXT แทน LONGTEXT/MEDIUMTEXT/TINYTEXT ใน SQLite Native
  2. ข้อมูล > 100KB: พิจารณาเก็บเป็นไฟล์ (Internal Storage) + เก็บ path ใน DB
  3. ใช้ Index บนคอลัมน์ TEXT ได้ (แต่ช้าและใหญ่)
  4. Full-text Search: ใช้ FTS5 Extension แทน

ผลลัพธ์

ListView แสดงข้อมูล LONGTEXT ได้ปกติ เหมือน TEXT ทุกประการ