티스토리 뷰

저번 글에 이어 이번 글에서는 FMDB를 이용한 SQLiteInsertSelect를 하는법을 알아보겠다.

 

일반적인 데이터 Insert는 테이블을 생성하는 방법에 SQL만 다르게 주면 된다.

하지만 동적인 값들을 입력하기 위해 이번에는 SQL에 파라미터를 주는 방법(자바로는 PrepareStatement)을 보겠다.

 

let dbPath = "mydatabase.db"

let fmdb = FMDatabase(path: dbPath)

 

if db.open() {

    let sql = "INSERT INTO MYTABLE(COL1, COL2) VALUES(:col1, :col2)"

    let paramDictionary = [NSObject:AnyObject]

    paramDictionary["col1"] = 33

    paramDictionary["col2"] = "myValue"

    let result = fmdb.executeUpdate(sql, withParameterDictionary: paramDictionary)

 

    if result {

        print("성공")

    }

}

fmdb.close()

 

 

코드를 해석해보자면 :(콜론)은 파라미터라는 표시이다. 그리고 콜론의 오른쪽에는 변수명이 온다. 이렇게 SQL에 표시를 해준 후, [NSObject:AnyObject] 타입의 Dictionary를 생성하여 SQL에 명시해준 변수명을 키로 SQL에 삽입할 값을 삽입해준다.

예를 들어 첫 번째 파라미터로는 :col1을 입력하였으므로 dictionary["col1"]=값 형식으로 입력해준다.

 

그 후 executeUpdate 함수에 withParameterDictionary 인자로 값을 입력한 dictionary를 함께 넘겨주면 SQL에 동적인 값을 입력 할 수 있게된다.

 

 

다음으로는 select를 하여 값을 받아오는 방법을 알아보겠다.

 

let dbPath = "mydatabase.db"

let fmdb = FMDatabase(path: dbPath)

 

if db.open() {

    let sql = "SELECT * FROM MYTABLE WHERE col1=:col1"

    let paramDictionary = [NSObject:AnyObject]

    paramDictionary["col1"] = 33

    let result = fmdb.executeQuery(sql, withParameterDictionary: paramDictionary)

    while result.next() == true {

        let resCol1 = result.intForColumn("col1")

        let resCol2 = result.stringForColumn("col2")

        print("\(resCol1) : \(resCol2)")

    }

}

fmdb.close()

 

 

다른부분은 모두 같지만 쿼리를 날리는 함수가 executeQuery로 바뀌었다.

이 함수는 자바로 치자면 ResultSet 같은 객체를 리턴한다.

 

반복문을 돌면서 다음 행을 가져와 [자료형]ForColumn("컬럼명") 함수로 값을 가져올 수 있다. 정수를 가져오려면 intForColumn, 실수를 가져오려면 doubleForColumn처럼 가져오면 된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함