IOS&Mac

[swift] IOS SQLite 사용하기

MOVE🔥 2023. 3. 3. 12:01
728x90
반응형
  • 별다른 설치 없이도 내부적으로 사용 가능 (외부 라이브러리 X)

Import

import SQLite3

Create DB

func createDB(path:String) -> OpaquePointer? {
        var db : OpaquePointer? = nil
        do {
            let filePath = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent(path)
            //db 연결, 이미 존재한다면 다시 생성하지 않고 넘어감
            if sqlite3_open(filePath.path, &db) == SQLITE_OK {
                print("Succesfully create Database path : \\(filePath.path)")
                return db
            }
        }
        catch{
            print("ERROR in CreateDB - \\(error.localizedDescription)")
        }
        print("ERROR in CreateDB - sqlite3_open ")
        return nil
    }

Query 적용

func commitQuery(query:String) {
        
        var statement : OpaquePointer? = nil
        
				// query 적용
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
            if sqlite3_step(statement) == SQLITE_DONE {
                print("Query SuccessFully \\(String(describing: db))")
            }
            else{
                let errorMessage = String(cString: sqlite3_errmsg(db))
                print("\\n Query fail :  \\(errorMessage)")
            }
        }
        else{
            let errorMessage = String(cString: sqlite3_errmsg(db))
            print("\\n Query Fail ! :\\(errorMessage)")
            
        }
        sqlite3_finalize(statement)
    }

Read Data

func readSULData(query:String) -> [SulVO?] {
                
        var statement : OpaquePointer? = nil
        var sulList:[SulVO?] = []
        
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
            
            while sqlite3_step(statement) == SQLITE_ROW{
                // 읽은 Data 변수에 담기
                let name =  String(cString: sqlite3_column_text(statement, 0))
                let price = sqlite3_column_int(statement, 1)
                // 반환할 리스트에 추가
                sulList.append(SulVO(name: name, price: Int(price)))
            }
        }
        else {
            let errorMessage = String(cString: sqlite3_errmsg(db))
            print("\\n read Data prepare fail! : \\(errorMessage)")
        }
        sqlite3_finalize(statement)
        // 결과 리스트 반환
        return sulList
    }

 

사용예시

DB, Table 생성

// DB Setting ( DB, table 생성 )
let myDB = DBHelper.shared;  //싱글톤 사용
myDB.createDB(path: "sulSqlite.sqlite")
var cTableQ:String = "create table if not exists sulListTB(name text not null primary key, price INTEGER not null);"
myDB.commitQuery(query: cTableQ)

Insert Data

// Test Data 추가
var sul = SulVO(name: "맥주", price:4000)
var testDataInsert = "insert into sulListTB(name, price) values(\\"" + sul.name + "\\",\\"" + String(sul.price) + "\\");"
myDB.commitQuery(query: testDataInsert)

ReadTable

var readSulQ = "select * from sulListTB;"
let myDB = DBHelper.shared;
// 읽어온 데이터 저장
var sulList:[SulVO] = myDB.readSULData(query: readSulQ) as! [SulVO]

 

 

728x90
반응형