คู่มือการพัฒนา

Local Navigation

การสร้างและลบฐานข้อมูล SQLite

คุณสามารถสร้างฐานข้อมูลแบบชั่วคราวหรือถาวรได้

ไฟล์ฐานข้อมูล SQLite

แต่ละฐานข้อมูล SQLite จะถูกจัดเก็บไว้ในไฟล์เดียว หากคุณระบุเฉพาะฐานข้อมูลเป็นค่าพารามิเตอร์ไปยัง DatabaseFactory.create() ไฟล์ฐานข้อมูลจะถูกสร้างขึ้นในที่จัดเก็บมีเดียการ์ดภายนอก ตำแหน่งดีฟอลต์สำหรับไฟล์ฐานข้อมูลคือ /SDCard/databases/application_name/ ชื่อของแอปพลิเคชันที่สร้างฐานข้อมูลจะถูกรวมอยู่ในพาธดีฟอลต์เพื่อหลีกเลี่ยงการชนกันของชื่อ

คุณไม่สามารถจัดเก็บฐานข้อมูล SQLite ในที่เก็บข้อมูลแอปพลิเคชันได้

ที่จัดเก็บมีเดียการ์ดภายนอกจะเป็นตำแหน่งที่เหมาะสมกว่าสำหรับฐานข้อมูล ในกรณีที่อุปกรณ์ BlackBerry สนับสนุน ในอุปกรณ์ที่สนับสนุนที่จัดเก็บมีเดียการ์ดภายนอก คุณสามารถสร้างฐานข้อมูลในที่จัดเก็บมีเดียการ์ดภายนอกได้โดยการระบุพาธ /SDcard/

หากแอปพลิเคชันของคุณถูกออกแบบมาเพื่อจัดเก็บฐานข้อมูล SQLite ของคุณในที่เก็บข้อมูลมีเดียในตัว คุณควรนำแอปพลิเคชันของคุณไปใช้ให้แก้ไขโค้ดเพื่อเปลี่ยนแปลงตำแหน่งของฐานข้อมูลได้ง่าย ในอุปกรณ์ที่สนับสนุนที่เก็บข้อมูลมีเดียในตัว คุณสามารถสร้างฐานข้อมูลในที่เก็บข้อมูลมีเดียในตัวได้โดยการระบุพาธ /store/

เมื่อแอปพลิเคชันของคุณถูกยกเลิกการติดตั้ง ฐานข้อมูล SQLite ที่เชื่อมโยงกับแอปพลิเคชันจะไม่ถูกลบออกโดยอัตโนมัติ

เกี่ยวกับไพมารีคีย์

แต่ละแถวในตาราง SQLite จะมีการระบุแบบไม่ซ้ำกันด้วย ID แถว ID แถวเป็นจำนวนเต็มแบบมีเครื่องหมายขนาด 64 บิต ซึ่งทำหน้าที่ระบุแถวแบบไม่ซ้ำกัน ID แถวสามารถเข้าถึงได้ด้วยชื่อ ROWID, OID, หรือ _ROWID_ แทนที่ชื่อคอลัมน์ นอกเสียจากว่าชื่อเหล่านั้นจะถูกใช้ในเป็นชื่อคอลัมน์ที่ประกาศอย่างเฉพาะเจาะจง หากตารางมีคอลัมน์ประเภท INTEGER PRIMARY KEY ชื่อของคอลัมน์นั้นจะเป็นชื่อเรียกอื่นสำหรับ ID แถว

เมื่อตารางอาจมีการแทรกที่เกิดขึ้นพร้อมกัน คุณต้องตรวจสอบให้แน่ใจว่าจะมีการส่งคืน ID แถวที่ถูกต้อง เมื่อคุณใช้ executeInsert ในการรันชุดคำสั่ง INSERT การซิงโครไนซ์จะถูกจัดการในเนทีฟโค้ดและจะไม่มีปัญหา แต่หากคุณรันชุดคำสั่ง INSERT ด้วยเมธอดอื่นนอกเหนือจาก executeInsert คุณควรรันชุดคำสั่ง INSERT และทำการเรียกไปยังเมธอด Database.lastInsertedRowID ภายในบล็อคที่ซิงโครไนซ์ บล็อคที่ซิงโครไนซ์ควรจะทำการป้องกันชุดคำสั่ง INSERT อื่นจากการรัน (และแก้ไข ID แถวที่แทรกสุดท้าย)

ในการดึงข้อมูลค่าจำนวนเต็มเพื่อใช้เป็นคีย์ในการสืบค้นอื่น คุณสามารถใช้เมธอด Statement.getIntegers และ Statement.getLongs ได้ เมธอดเหล่านี้ทำให้การดึงข้อมูลของคอลัมน์จำนวนเต็มง่ายขึ้นและมีประสิทธิภาพมากขึ้น คุณสามารถมองค่าจำนวนเต็มที่ดึงข้อมูลเป็นฟอรีนคีย์ได้ ยกเว้นค่าดังกล่าวไม่จำเป็นต้องอ้างอิงถึงไพมารีคีย์ของตารางอื่น

SQLite จะสร้างดัชนีโดยอัตโนมัติสำหรับคอลัมน์ที่มีข้อจำกัด UNIQUE หรือ PRIMARY KEY

การบังคับใช้ข้อจำกัดฟอรีนคีย์

หากคุณใช้ฟอรีนคีย์ในฐานข้อมูลของคุณ คุณสามารถบังคับการใช้งานได้โดยการตั้งค่าตัวเลือก foreign_key_constraints ในคลาส DatabaseOptions

คุณสามารถตั้งค่าตัวเลือก foreign_key_constraints เมื่อคุณสร้างฐานข้อมูล อย่างไรก็ตาม เพื่อให้ข้อจำกัดฟอรีนคีย์มีผลบังคับใช้ คุณต้องตั้งค่าตัวเลือกทุกครั้งที่คุณเปิดฐานข้อมูล ตัวอย่างโค้ดต่อไปนี้จะแสดงถึงวิธีการบังคับใช้ข้อจำกัดฟอรีนคีย์ขณะทำการเปิดหรือสร้างฐานข้อมูล

DatabaseOptions dbo = new DatabaseOptions();
dbo.set("foreign_key_constraints","on");
Database d = DatabaseFactory.openOrCreate("test.db", dbo);

คุณสามารถตรวจสอบได้ว่ามีการใช้ข้อจำกัดฟอรีนคีย์กับเมธอด DatabaseOptions.foreignKeyConstraintsOn หรือไม่

การเข้ารหัสตัวอักษร

ฐานข้อมูล SQLite จะจัดเก็บสตริงต่างๆ ไว้ภายในเป็น UTF-8 ในขณะที่ Java จะจัดเก็บเป็น UTF-16 Database API จะจัดการการแปลงค่าของสตริงต่างๆ ภายใน คุณจึงไม่จำเป็นต้องทำการเข้ารหัสหรือแปลงค่าใดๆ

Pragma encoding ของ SQLite ไม่ได้รับการสนับสนุนใน Database API คุณจึงไม่สามารถตั้งค่าการเข้ารหัสอื่นได้ คุณต้องใช้ตัวอักษรที่สนับสนุน UTF-8 ในฐานข้อมูล SQLite ของคุณ

การใช้การจัดเรียงตามภาษา

เมื่อฐานข้อมูลของคุณมีข้อมูลตัวอักษรในภาษาอื่นๆ นอกเหนือจากภาษาอังกฤษ คุณสามารถตั้งค่าการจัดเรียงตามภาษาเพื่อให้ SQLite ทำการเรียงคอลัมน์และสร้างดัชนีอย่างเหมาะสม คุณสามารถดำเนินการนี้ได้ด้วยโอเปอเรเตอร์ COLLATE เมื่อคุณทำการสร้างคอลัมน์

การจัดเรียงมาตรฐานดีฟอลต์จะให้ผลลัพธ์ที่ดีสำหรับภาษาอังกฤษในการใช้งานปกติ และยังสามารถจัดเรียงได้อย่างถูกต้องสำหรับภาษาที่มีการใช้งานทั่วไปอื่นๆ อีกหลายภาษา รวมทั้งอาจให้ผลลัพธ์ที่ถูกต้องสำหรับบางภาษาลาตินและสคริปต์แบบตัวอักษรแทนความหมาย เช่นภาษาจีนและญี่ปุ่น

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงการจัดเรียงดีฟอลต์ ดูที่ www.unicode.org

ส่วนย่อยของโค้ดต่อไปนี้จะสร้างตารางโดยเปิดใช้งานการจัดเรียงตามภาษาฝรั่งเศสบนคอลัมน์ที่ชื่อ a โดยสมมุติว่าฐานข้อมูล d เปิดอยู่

d.executeStatement( "CREATE TABLE t1( a COLLATE french );" );

การจัดเรียงตามภาษาต่อไปนี้จะได้รับการสนับสนุนในแอปพลิเคชัน BlackBerry:

  • มาตรฐาน (ค่าดีฟอลต์)

  • แอฟริคานส์

  • อาหรับ

  • คาตาลัน

  • เช็ก

  • ฝรั่งเศส

  • ฮีบรู

  • จีนฮ่องกง

  • ฮังการี

  • ญี่ปุ่น

  • เกาหลี

  • Pinyin

  • โปแลนด์

  • โรมาเนีย

  • สเปน

  • ภาษาไทย

  • ตุรกี

  • จีนไต้หวัน


ข้อมูลนี้มีประโยชน์หรือไม่ โปรดส่งความคิดเห็นให้กับเรา