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

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

บทนำ: TINYINT ใน SQLite

TINYINT เป็นคีย์เวิร์ดที่ SQLite รับเพื่อความเข้ากันได้กับ MySQL แมปไปที่ INTEGER Affinity (จำนวนเต็ม 64-bit ใน SQLite)

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

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

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

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

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

TINYINT ใน SQLite vs MySQL

คุณสมบัติMySQLSQLite
ช่วงค่า (Signed)-128 ถึง 127 (1 byte)-9,223,372,036,854,775,808 ถึง 9,223,372,036,854,775,807 (8 bytes)
ช่วงค่า (Unsigned)0 ถึง 255ไม่มี UNSIGNED แยก
AffinityINTEGERINTEGER
BooleanTINYINT(1) ใช้แทน BooleanINTEGER 0/1 ใช้แทน Boolean

⚠️ ความแตกต่างสำคัญ

  • MySQL: TINYINT = 1 byte, จำกัดค่า -128 ถึง 127
  • SQLite: TINYINT = INTEGER = 8 bytes, ไม่จำกัดค่า
  • SQLite ไม่ Enforce ขนาดจากคีย์เวิร์ด (TINYINT, SMALLINT, MEDIUMINT, BIGINT = INTEGER ทั้งหมด)

การใช้ TINYINT แทน Boolean

ใน SQLite ไม่มี Boolean Type ใช้ INTEGER แทน:

-- Schema
CREATE TABLE settings (
    id INTEGER PRIMARY KEY,
    key TEXT,
    value TINYINT DEFAULT 0  -- 0 = false, 1 = true
);

-- Insert
INSERT INTO settings (key, value) VALUES ('dark_mode', 1);
INSERT INTO settings (key, value) VALUES ('notifications', 0);

-- Query
SELECT key, CASE value WHEN 1 THEN 'ON' ELSE 'OFF' END as status FROM settings;

CHECK Constraint สำหรับจำกัดค่า (แนะนำ)

หากต้องการจำกัดให้เป็น 0/1 หรือ -128 ถึง 127 จริงๆ:

-- Boolean (0 หรือ 1)
CREATE TABLE flags (
    id INTEGER PRIMARY KEY,
    name TEXT,
    enabled TINYINT CHECK (enabled IN (0, 1)) DEFAULT 0
);

-- Tinyint Range (-128 ถึง 127)
CREATE TABLE small_numbers (
    id INTEGER PRIMARY KEY,
    value TINYINT CHECK (value >= -128 AND value <= 127)
);

ข้อแนะนำ Best Practices

  1. ใช้ INTEGER แทน TINYINT/SMALLINT/MEDIUMINT/BIGINT ใน SQLite Native
  2. ใช้ CHECK constraint หากต้องการ Validate Range
  3. Boolean: ใช้ INTEGER + CHECK (0,1) หรือ ใช้ BOOLEAN keyword (แมปเป็น NUMERIC)
  4. Porting จาก MySQL: ระวังค่าที่เกิน Range ของ MySQL TINYINT

ผลลัพธ์

ListView แสดง salary เป็น TINYINT (เก็บค่าได้มากกว่า 127 ใน SQLite)