เพื่อเพิ่มคะแนนที่หายไปเพิ่มเติมที่นี่ตามคำขอโดย Jaskey
เวอร์ชันฐานข้อมูลถูกเก็บไว้ในSQLite
ไฟล์ฐานข้อมูล
catch เป็นตัวสร้าง
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
ดังนั้นเมื่อตัวสร้างผู้ช่วยฐานข้อมูลถูกเรียกด้วยname
(พารามิเตอร์ที่ 2) แพลตฟอร์มจะตรวจสอบว่าฐานข้อมูลมีอยู่หรือไม่และถ้าฐานข้อมูลนั้นมีอยู่จะได้รับข้อมูลรุ่นจากส่วนหัวของไฟล์ฐานข้อมูลและทริกเกอร์การโทรกลับด้านขวา
onCreate
ตามที่อธิบายไว้แล้วในคำตอบที่เก่าถ้าฐานข้อมูลที่มีชื่อไม่ได้ที่มีอยู่ก็ทริกเกอร์
คำอธิบายด้านล่างอธิบายonUpgrade
กรณีและตัวอย่าง
สมมติว่าเวอร์ชันแรกของแอปพลิเคชันของคุณมีDatabaseHelper
(ขยายSQLiteOpenHelper
) พร้อมตัวสร้างผ่านเวอร์ชันเป็น1
และจากนั้นคุณให้แอปพลิเคชันที่อัปเกรดพร้อมด้วยซอร์สโค้ดใหม่ที่มีเวอร์ชันผ่านเป็น2
จากนั้นโดยอัตโนมัติเมื่อDatabaseHelper
สร้างonUpgrade
ขึ้นมา แต่เวอร์ชันต่ำกว่าเวอร์ชันปัจจุบันที่คุณผ่าน
ตอนนี้บอกว่าคุณกำลังวางแผนที่จะให้แอปพลิเคชั่นรุ่นที่สามพร้อมกับเวอร์ชัน db เป็น3
(เวอร์ชัน db จะเพิ่มขึ้นก็ต่อเมื่อมีการปรับเปลี่ยนสกีมาฐานข้อมูล) ในการอัพเกรดแบบเพิ่มหน่วยเช่นนี้คุณต้องเขียนลอจิกการอัพเกรดจากแต่ละเวอร์ชั่นทีละส่วนเพื่อให้โค้ดที่บำรุงรักษาได้ดีขึ้น
ตัวอย่างรหัสเทียมด้านล่าง:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
//upgrade logic from version 1 to 2
case 2:
//upgrade logic from version 2 to 3
case 3:
//upgrade logic from version 3 to 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion " + oldVersion);
}
}
สังเกตเห็นหายไปbreak
คำสั่งในกรณีและ1
2
นี่คือสิ่งที่ฉันหมายถึงโดยการอัพเกรดที่เพิ่มขึ้น
พูดถ้ารุ่นเก่าเป็น2
และรุ่นใหม่4
แล้วตรรกะจะอัพเกรดฐานข้อมูลจาก2
เป็น3
และจากนั้นเป็น4
ถ้าเป็นรุ่นเก่า3
และรุ่นใหม่4
มันก็จะทำงานตรรกะอัพเกรด3
ไป4