Computer >> 컴퓨터 >  >> 프로그램 작성 >> IOS

iPhone에서 SQLite 데이터베이스 인스턴스에 액세스하는 방법

<시간/>

데이터 저장은 애플리케이션을 설계할 때 가장 중요한 것 중 하나입니다. 이러한 방식으로 데이터를 저장하는 수많은 방법이 있습니다. 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으로 이름을 지정합니다.

iPhone에서 SQLite 데이터베이스 인스턴스에 액세스하는 방법

그래서 우리는 데이터를 삽입하기 위한 하나와 그것을 표시하기 위한 다른 하나를 위한 두 개의 버튼을 추가했습니다. 또한 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가 인쇄되는 것을 볼 수 있습니다.

iPhone에서 SQLite 데이터베이스 인스턴스에 액세스하는 방법

iPhone에서 SQLite 데이터베이스 인스턴스에 액세스하는 방법