iOS Sqlite


자료형

사용할 수 있는 자료형은 5가지 NULL: 널값

INTEGER: 1,2,3,4,6,8bytes의 정수값 (자동증가 시킬 경우 INTEGER PRIMARY KEY AUTOINCREMENT 로 표기)

REAL: 8bytes의 부동소수점값

TEXT: UTF-8, UTF-16BE, UTF-16LE인코딩의 문자열

BLOB: 입력된 그대로 저장, 바이너리 파일 등

다른 형태는 어떻게 만들면 될까? Boolean타입: INTEGER로 만들어서 0과 1로 구별.

Date, Time타입 TEXT: YYYY-MM-DD HH:MM:SS.SSS 형태로 저장 REAL: 율리우스력을 기준으로 하는 정보를 저장 INTEGER: UTC타입으로 저장

SQLite에 숫자, 문자, 바이너리를 넣을 수 있으니 자유롭게 넣고 개발자가 알아서 정해서 사용하면 된다.

SQLite in iOS

import SQLite3

저장 장소 설정

let path: String = {
      let fm = FileManager.default
      return fm.urls(for:.libraryDirectory, in:.userDomainMask).last!
               .appendingPathComponent("ToDo.db").path
    }()

DB 생성

let createTableString = """
    CREATE TABLE IF NOT EXISTS ToDo(
    Id INTEGER PRIMARY KEY AUTOINCREMENT,
    Work CHAR(255),
    Done INT);
    """
var db:OpaquePointer?

INSERT

sqlite3_bind_text() 할 때, String을 NSString으로 변환한 후, utf8string 으로 넘겨줘야 정상적으로 insert가 된다.

func insert() {
  var insertStatement: OpaquePointer?
  // 1
  if sqlite3_prepare_v2(db, insertStatementString, -1, &insertStatement, nil) == 
      SQLITE_OK {
    let id: Int32 = 1
    let name: NSString = "Ray"
    // 2
    sqlite3_bind_int(insertStatement, 1, id)
    // 3
    sqlite3_bind_text(insertStatement, 2, name.utf8String, -1, nil)
    // 4
    if sqlite3_step(insertStatement) == SQLITE_DONE {
      print("\nSuccessfully inserted row.")
    } else {
      print("\nCould not insert row.")
    }
  } else {
    print("\nINSERT statement is not prepared.")
  }
  // 5
  sqlite3_finalize(insertStatement)
}

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다