자료형
사용할 수 있는 자료형은 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)
}