Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> IOS

ฉันจะเข้าถึงอินสแตนซ์ฐานข้อมูล SQLite บน iPhone . ได้อย่างไร


การจัดเก็บข้อมูลเป็นสิ่งสำคัญที่สุดอย่างหนึ่งเมื่อเราออกแบบแอปพลิเคชันใดๆ มีหลายวิธีในการจัดเก็บข้อมูล วิธีหนึ่งคือ SQLite databse

มีหลายวิธีในการเข้าถึงฐานข้อมูล SQLite บน iPhone เราจะเห็นวิธีที่ง่ายที่สุดในการดำเนินการใน Swift

SQLite เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ที่มีอยู่ในไลบรารีการเขียนโปรแกรม C ที่ฝังอยู่ในแอปพลิเคชัน

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

เริ่มกันเลย

ขั้นตอนที่ 1 − เปิด Xcode -→ แอปพลิเคชั่นมุมมองเดียว -→ เรามาชื่อ DBSqlite กันเถอะ

ขั้นตอนที่ 2 − มาพัฒนา UI เปิด Main.storyboard ของเราและเพิ่มฟิลด์ข้อความหนึ่งฟิลด์และสองปุ่มดังที่แสดงด้านล่าง

ขั้นตอนที่ 3 − สร้าง @IBAction สำหรับทั้งปุ่มและ @IBOutlet สำหรับช่องข้อความและตั้งชื่อเป็น btnInsert, btnShowData และชื่อตามลำดับ

ฉันจะเข้าถึงอินสแตนซ์ฐานข้อมูล SQLite บน iPhone . ได้อย่างไร

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

ขั้นตอนที่ 4 − มาสร้างไฟล์ SQLite ของเราและเปิดการเชื่อมต่อฐานข้อมูลกันเถอะ

ใน ViewController.swift เขียน

นำเข้า SQLite3

ภายใต้ ViewDidLoad ให้เขียนโค้ดต่อไปนี้ มันจะสร้างไฟล์ .sqlite และเราสามารถพิมพ์ตำแหน่งที่มันสร้างขึ้นได้ เรากำลังตั้งชื่อไฟล์ sqlite เป็น “user_name.sqlite” เนื่องจากเราจะใส่เฉพาะชื่อเท่านั้น

ให้ file_URL =ลอง! FileManager.default.url(สำหรับ:.documentDirectory ใน:.userDomainMask เหมาะสำหรับ:ไม่มี สร้าง:false).appendingPathComponent("user_name.sqlite")

ตอนนี้เราจะใช้ฟังก์ชัน sqlite3_open() ในการเปิดฐานข้อมูล

สร้างวัตถุของ OpaquePointer เราจะใช้สิ่งนี้ในการดำเนินการ สร้างตัวแปรนี้เหนือ ViewDidLoad ทั่วโลก

var db:OpaquePointer?

ขั้นตอนที่ 5 − มาสร้างตารางกันตอนนี้ สำหรับการสร้างตารางให้เขียนโค้ดด้านล่างในเมธอด viewDidLoad ของคุณ

//การสร้าง tableif sqlite3_exec (db, "สร้างตารางหากไม่มีผู้ใช้อยู่ (id INTEGER PRIMARY KEY AUTOINCREMENT, ชื่อ TEXT)", ไม่มี, ไม่มี, ไม่มี) !=SQLITE_OK { let errorMsg =String (cString:sqlite3_errmsg (db )!) print("มีข้อผิดพลาดในการสร้างตาราง:\(errorMsg)")}

หลังจากขั้นตอนที่ 5 โค้ดสุดท้ายของคุณควรเป็นดังนี้

<ก่อนหน้า>นำเข้า UIKitimport SQLite3class ViewController:UIViewController { var db:OpaquePointer? @IBOutlet ชื่อ var:UITextField! แทนที่ func viewDidLoad () { super.viewDidLoad () ให้ file_URL =ลอง! FileManager.default.url(สำหรับ:.documentDirectory ใน:.userDomainMask, เหมาะสำหรับ:ไม่มี, สร้าง:false).appendingPathComponent("user_name.sqlite") พิมพ์ (file_url) // เพื่อพิมพ์เส้นทางของ sqlite // การเปิดฐานข้อมูลถ้า sqlite3_open (file_URL.path, &db) !=SQLITE_OK { พิมพ์ ("มีข้อผิดพลาดในการเปิดฐานข้อมูล") } // สร้างตารางถ้า sqlite3_exec (db, "สร้างตารางหากไม่มีผู้ใช้อยู่ (id INTEGER PRIMARY) KEY AUTOINCREMENT ชื่อ TEXT)", nil, nil, nil) !=SQLITE_OK { let errorMsg =String(cString:sqlite3_errmsg(db)!) print("มีข้อผิดพลาดในการสร้างตาราง:\(errorMsg)") } } @IBAction func btnInsert(_ ผู้ส่ง:ใด ๆ ) { } @IBAction func btnShowData (_ ผู้ส่ง:ใด ๆ ) { }}

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

ขั้นตอนที่ 6 − ตอนนี้เราจะเขียนโค้ดเพื่อแทรกข้อมูล ดังนั้นใน btnInsert ให้เขียนโค้ดด้านล่าง

คำสั่ง var:OpaquePointer?guard ให้ user_name =name.text, !user_name.isEmpty else { return} ให้เคียวรี ="INSERT INTO users (name) VALUES (?)"if sqlite3_prepare(db, query, -1, &statement , ไม่มี) !=SQLITE_OK { ให้ errmsg =String(cString:sqlite3_errmsg(db)!) พิมพ์ ("ข้อผิดพลาดในการเตรียมการแทรก:\(errmsg)") return} ถ้า sqlite3_bind_text (คำสั่ง 1 ชื่อผู้ใช้ -1 ไม่มี) ! =SQLITE_OK { ให้ errmsg =สตริง (cString:sqlite3_errmsg (db)!) พิมพ์ ("ชื่อการผูกล้มเหลว:\(errmsg)") ส่งคืน} ถ้า sqlite3_step (คำสั่ง) !=SQLITE_DONE { ให้ errmsg =สตริง (cString:sqlite3_errmsg (db )!) print("การแทรกผู้ใช้ที่ล้มเหลว:\(errmsg)")return

เราเพียงแค่เขียนค่าของเราจากช่องข้อความไปยังตารางของเรา

ขั้นตอนที่ 7 − ตอนนี้ เราควรแสดงข้อมูลที่เขียนโค้ดด้านล่างใน btnShowData

ปล่อยให้แบบสอบถาม ="เลือก * จากผู้ใช้" คำสั่ง var:OpaquePointer?if sqlite3_prepare (db, แบบสอบถาม, -1, &statement, ไม่มี) !=SQLITE_OK { ให้ errmsg =สตริง (cString:sqlite3_errmsg (db)!) พิมพ์ ( "ข้อผิดพลาดในการจัดเตรียมส่วนแทรก:\(errmsg)") return} ในขณะที่ (sqlite3_step (คำสั่ง) ==SQLITE_ROW) { ให้ชื่อ =สตริง (cString:sqlite3_column_text (คำสั่ง, 1)) พิมพ์ (ชื่อ)}

โค้ดสุดท้ายของคุณควรเป็นด้านล่าง

<ก่อนหน้า>นำเข้า UIKitimport SQLite3class ViewController:UIViewController { var db:OpaquePointer? @IBOutlet ชื่อ var:UITextField! แทนที่ func viewDidLoad () { super.viewDidLoad () ให้ file_URL =ลอง! FileManager.default.url(for:.documentDirectory, in:.userDomainMask, suitableFor:nil, create:false) .appendingPathComponent("user_name.sqlite") //เปิดฐานข้อมูลถ้า sqlite3_open(file_URL.path, &db) !=SQLITE_OK { พิมพ์ ("มีข้อผิดพลาดในการเปิดฐานข้อมูล") } // การสร้างตารางถ้า sqlite3_exec (db, "สร้างตารางหากไม่มีผู้ใช้อยู่ (id INTEGER PRIMARY KEY AUTOINCREMENT ชื่อ TEXT)", ไม่มี, ไม่มี, ไม่มี) !=SQLITE_OK { let errorMsg =String(cString:sqlite3_errmsg(db)!) print("มีข้อผิดพลาดในการสร้างตาราง:\(errorMsg)") } } @IBAction func btnInsert (_ sender:Any) { คำสั่ง var:OpaquePointer? guard ให้ user_name =name.text, !user_name.isEmpty else { return } let query ="INSERT INTO users (name) VALUES (?)" if sqlite3_prepare (db, query, -1, &statement, nil) !=SQLITE_OK { ให้ errmsg =String (cString:sqlite3_errmsg (db)!) พิมพ์ ("ข้อผิดพลาดในการเตรียมการแทรก:\(errmsg)") return } ถ้า sqlite3_bind_text (คำสั่ง 1 ชื่อผู้ใช้ -1 ไม่มี) !=SQLITE_OK { ให้ errmsg =สตริง ( cString:sqlite3_errmsg(db)!) print("failure binding name:\(errmsg)") return } if sqlite3_step(statement) !=SQLITE_DONE { let errmsg =String(cString:sqlite3_errmsg(db)!) พิมพ์ ("การแทรกล้มเหลว ผู้ใช้:\(errmsg)") return } } @IBAction func btnShowData (_ ผู้ส่ง:ใด ๆ ) { ให้แบบสอบถาม ="เลือก * จากผู้ใช้" คำสั่ง var:OpaquePointer? ถ้า sqlite3_prepare(db, query, -1, &statement, nil) !=SQLITE_OK { let errmsg =String(cString:sqlite3_errmsg(db)!) print("ข้อผิดพลาดในการจัดเตรียมการแทรก:\(errmsg)") return } ในขณะที่ (sqlite3_step( คำสั่ง) ==SQLITE_ROW) { ให้ชื่อ =สตริง (cString:sqlite3_column_text (คำสั่ง, 1)) พิมพ์ (ชื่อ) } }}

ตอนนี้เราจะเรียกใช้รหัสและดูป้อนชื่อ HELLO แล้วแตะที่ส่วนแทรก จากนั้นแตะที่รายการ คุณจะเห็น HELLO พิมพ์อยู่ในเอาต์พุตในพื้นที่ดีบักเกอร์ใน Xcode

ฉันจะเข้าถึงอินสแตนซ์ฐานข้อมูล SQLite บน iPhone . ได้อย่างไร

ฉันจะเข้าถึงอินสแตนซ์ฐานข้อมูล SQLite บน iPhone . ได้อย่างไร