데이터 저장은 애플리케이션을 설계할 때 가장 중요한 것 중 하나입니다. 이러한 방식으로 데이터를 저장하는 수많은 방법이 있습니다. SQLite 데이터베이스입니다.
iPhone에서 SQLite 데이터베이스에 액세스하는 방법에는 여러 가지가 있습니다. 우리는 가장 쉬운 방법을 Swift에서 보게 될 것입니다.
SQLite는 애플리케이션에 내장된 C 프로그래밍 라이브러리에 포함된 관계형 데이터베이스 관리 시스템입니다.
이 튜토리얼에서는 이름을 입력하기 위한 텍스트 필드가 있는 하나의 샘플 응용 프로그램을 만들고 SQLite 데이터베이스에 이름을 저장하고 사용자가 표시 버튼을 탭할 때 동일한 내용을 인쇄합니다.
시작하겠습니다
1단계 − Xcode 열기 -> Single View Application -> DBSqlite입니다.
2단계 − UI를 개발하고 Main.storyboard를 열고 아래와 같이 텍스트 필드 1개와 버튼 2개를 추가합니다.
3단계 − 버튼에 @IBAction을 생성하고 텍스트 필드에 @IBOutlet을 생성하고 각각 btnInsert, btnShowData 및 name으로 이름을 지정합니다.
그래서 우리는 데이터를 삽입하기 위한 하나와 그것을 표시하기 위한 다른 하나를 위한 두 개의 버튼을 추가했습니다. 또한 db에 삽입해야 하는 이름을 입력할 수 있는 하나의 텍스트 필드를 만들었습니다.
4단계 − SQLite 파일을 생성하고 데이터베이스 연결을 열어봅시다.
ViewController.swift에서 쓰기
SQLite3 가져오기
ViewDidLoad 아래에 다음 코드를 작성하면 .sqlite 파일이 생성되고 생성된 위치를 인쇄할 수 있습니다. 이름만 삽입할 것이기 때문에 sqlite 파일의 이름을 "user_name.sqlite"로 지정합니다.
let file_URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("user_name.sqlite")
이제 sqlite3_open() 함수를 사용하여 데이터베이스를 엽니다.
OpaquePointer의 개체를 만듭니다. 우리는 이것을 작업에 사용할 것입니다. 전역적으로 ViewDidLoad 위에 이 변수를 만듭니다.
var db:불투명 포인터?
5단계 − 이제 테이블을 생성해 보겠습니다. 테이블 생성을 위해 viewDidLoad 메소드에 아래 코드를 작성하세요.
//creating table if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)", nil, nil, nil) != SQLITE_OK { let errorMsg = String(cString: sqlite3_errmsg(db)!) print("There's error creating the table: \(errorMsg)") }
5단계 후 최종 코드는 다음과 같아야 합니다.
import UIKit import SQLite3 class ViewController: UIViewController { var db: OpaquePointer? @IBOutlet var name: UITextField! override func viewDidLoad() { super.viewDidLoad() let file_URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) .appendingPathComponent("user_name.sqlite") print (file_url) //to print the path of sqlite. //opening the database if sqlite3_open(file_URL.path, &db) != SQLITE_OK { print("There's error in opening the database") } //create table if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)", nil, nil, nil) != SQLITE_OK { let errorMsg = String(cString: sqlite3_errmsg(db)!) print("There's error creating the table: \(errorMsg)") } } @IBAction func btnInsert(_ sender: Any) { } @IBAction func btnShowData(_ sender: Any) { } }
위의 코드를 실행하면 오류가 발생하지 않습니다. 해당 위치로 이동하여 sqlite 파일을 확인하십시오.
6단계 − 이제 데이터를 삽입하는 코드를 작성하므로 btnInsert에서 아래 코드를 작성합니다.
var statement: OpaquePointer? guard let 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 { let errmsg = String(cString: sqlite3_errmsg(db)!) print("error preparing insert: \(errmsg)") return } if sqlite3_bind_text(statement, 1, user_name, -1, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("failure binding name: \(errmsg)") return } if sqlite3_step(statement) != SQLITE_DONE { let errmsg = String(cString: sqlite3_errmsg(db)!) print("failure inserting users: \(errmsg)") return
여기서는 단순히 텍스트 필드의 값을 테이블에 씁니다.
7단계 − 이제 btnShowData에 아래 코드를 작성하여 데이터를 표시해야 합니다.
let query = "SELECT * FROM users" var statement:OpaquePointer? if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("error preparing insert: \(errmsg)") return } while(sqlite3_step(statement) == SQLITE_ROW) { let name = String(cString: sqlite3_column_text(statement, 1)) print(name) }
최종 코드는 다음과 같아야 합니다.
import UIKit import SQLite3 class ViewController: UIViewController { var db: OpaquePointer? @IBOutlet var name: UITextField! override func viewDidLoad() { super.viewDidLoad() let file_URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) .appendingPathComponent("user_name.sqlite") //opening the database if sqlite3_open(file_URL.path, &db) != SQLITE_OK { print("There's error in opening the database") } //creating table if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)", nil, nil, nil) != SQLITE_OK { let errorMsg = String(cString: sqlite3_errmsg(db)!) print("There's error creating the table: \(errorMsg)") } } @IBAction func btnInsert(_ sender: Any) { var statement: OpaquePointer? guard let 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 { let errmsg = String(cString: sqlite3_errmsg(db)!) print("error preparing insert: \(errmsg)") return } if sqlite3_bind_text(statement, 1, user_name, -1, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("failure binding name: \(errmsg)") return } if sqlite3_step(statement) != SQLITE_DONE { let errmsg = String(cString: sqlite3_errmsg(db)!) print("failure inserting users: \(errmsg)") return } } @IBAction func btnShowData(_ sender: Any) { let query = "SELECT * FROM users" var statement:OpaquePointer? if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK { let errmsg = String(cString: sqlite3_errmsg(db)!) print("error preparing insert: \(errmsg)") return } while(sqlite3_step(statement) == SQLITE_ROW) { let name = String(cString: sqlite3_column_text(statement, 1)) print(name) } } }
이제 코드를 실행하고 HELLO라는 이름을 입력하고 삽입을 탭합니다. 그런 다음 표시를 탭하면 Xcode의 디버거 영역에서 출력에 HELLO가 인쇄되는 것을 볼 수 있습니다.