swift3 sqlite3 작업
import Foundation
enum SQLite3Error : Error {
case connectionError(String)
case queryError(String)
case valueError(String)
case otherError(String)
}
class SQLite3Conn {
var stmt: OpaquePointer? = nil
var db: OpaquePointer? = nil
init?() {
var needsSetup = false
let path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
.last!.appendingPathComponent("data.db").path
if !FileManager.default.fileExists(atPath: path) {
print("no database file. setup.")
needsSetup = true
}
/*
func sqlite3_open(_ filename: UnsafePointer!, _ ppDb: UnsafeMutablePointer!) -> Int32
*/
if sqlite3_open(path, &db) != SQLITE_OK {
return nil
}
if needsSetup {
let query = "CREATE TABLE IF NOT EXISTS test ( num INT, text TEXT );"
do {
try prepare(query: query){ () -> Void in
if sqlite3_step(stmt) != SQLITE_DONE {
throw SQLite3Error.valueError("Fail to create table")
}
}
} catch {
print("Error")
return nil
}
}
}
deinit {
if let db = db {
sqlite3_close(db)
}
}
func prepare(query: String, _ body: () throws -> ResultType) throws -> ResultType {
/*
func sqlite3_prepare_v2(
_ db: OpaquePointer!,
_ zSql: UnsafePointer!,
_ nByte: Int32,
_ ppStmt: UnsafeMutablePointer!,
_ pzTail: UnsafeMutablePointer?>!
) -> Int32
*/
guard sqlite3_prepare_v2(db, query, -1, &stmt, nil) == SQLITE_OK
else { throw SQLite3Error.queryError("Fail to compile Query:
\(query)")}
defer {sqlite3_finalize(stmt)}
let r = try body()
return r
}
}
extension SQLite3Conn {
func insert(num: Int32, text: String) {
let query = "INSERT INTO test (num, text) VALUES (?, ?)"
do {
try prepare(query: query){ () -> Void in
guard sqlite3_bind_int(stmt, 1, num) == SQLITE_OK else { throw SQLite3Error.valueError("can't bind num") }
guard sqlite3_bind_text(stmt, 2, text, -1, nil) == SQLITE_OK else {throw SQLite3Error.valueError("can't bind text")}
guard sqlite3_step(stmt) == SQLITE_DONE else {throw SQLite3Error.otherError("Fail to insert")}
print("ok")
}
} catch {
print("fail")
}
}
}
let d = SQLite3Conn()!
d.insert(num: 2, text: "World")
d.insert(num: 43, text: "TEST")
d.insert(num:55, text: "Anna")
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.