ios에서 sqlite3 을 이용하여 데이터베이스를 사용해보자.



project setting 메뉴에서 Build Phases 탭으로 들어가 아래 그림처럼 libsqlite3.tbd 파일을 추가한다.






xcode 메뉴바 상단에 Source Control을 클릭하여 아래 사진과 같이 github 주소를 입력한 후 fmdb 를 다운로드 받는다.







다운받은 FMDB 관련 파일들을 프로젝트 안에 넣으면 되는데 아래 파일들을 복사하려고 하면 Objective-C bridging header를 사용할거냐는 팝업이 나온다.

이때 Create Bridging Header 를 선택하면 아래 사진처럼 파일들이 복사되고 맨아래 Database-Bridging-Header.h 파일이 생성된다.




Database-Bridging-Header.h 파일을 열어 아래 코드를 추가해준다.

#import "FMDB.h"




테스트 앱은 이름 주소 전화번호를 저장하고 이름을 입력하면 주소와 전화번호가 화면에 나오는 앱인데

스토리보드에서 텍스트필드나 레이블 버튼등을 드래그 하여 생성하고 컨트롤러 파일에 연결하는 과정은 생략하도록 하겠다.





viewController.swift 파일의 viewDidLoad 메소드 안에 아래의 코드를 넣어준다.

아래의 코드는 앱이 실행되었을 때 contacts.db파일을 생성하고 테이블을 만들어주는 코드이다.

override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        

        let filemgr = NSFileManager.defaultManager()

        let dirPaths = filemgr.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)

        databasePath = dirPaths[0].URLByAppendingPathComponent("contacts.db").path!

        

        if !filemgr.fileExistsAtPath(databasePath as String) {

            

            let contactDB = FMDatabase(path: databasePath as String)

            

            if contactDB == nil {

                print("Error: \(contactDB.lastErrorMessage())")

            }

            

            if contactDB.open() {

                let sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)"

                

                if !contactDB.executeStatements(sql_stmt) {

                    print("Error: \(contactDB.lastErrorMessage())")

                }

                contactDB.close()

            } else {

                print("Error: \(contactDB.lastErrorMessage())")

            }

        }

 }





다음으로 save버튼에 대한 액션으로 아래의 코드를 넣어준다.

아래의 코드는 텍스트필드에 이름,주소,폰번호 를 입력하고 save버튼을 클릭했을 때 insert 문을 사용하여 생성된 table에 저장하는 코드이다.

@IBAction func saveData(sender: AnyObject) {

        

        let contactDB = FMDatabase(path: databasePath as String)

        

        if contactDB.open() {

            let insertSQL = "INSERT INTO CONTACTS (name, address, phone) VALUES ('\(name.text!)','\(address.text!)','\(phone.text!)')"

            let result = contactDB.executeUpdate(insertSQL, withArgumentsInArray: nil)

            

            if !result {

                status.text = "Failed to add contact"

                print("Error: \(contactDB.lastErrorMessage())")

            } else {

                status.text = "Contact Added"

                name.text = ""

                address.text = ""

                phone.text = ""

            }

        } else {

            print("Error: \(contactDB.lastErrorMessage())")

        }

 }





find버튼에 대한 액션으로 아래의 코드를 넣어준다.

아래의 코드는 텍스트필드의 이름 입력칸에 저장된 이름을 넣고 find버튼을 클릭하면 select 문을 통해 주소와 폰번호를 가져오는 코드이다.

@IBAction func findContact(sender: AnyObject) {

        

        let contactDB = FMDatabase(path: databasePath as String)

        

        if contactDB.open() {

            let querySQL = "SELECT address, phone FROM CONTACTS WHERE name = '\(name.text!)'"

            let results:FMResultSet? = contactDB.executeQuery(querySQL, withArgumentsInArray: nil)

            

            if results?.next() == true {

                address.text = results?.stringForColumn("address")

                phone.text = results?.stringForColumn("phone")

                status.text = "Record Found"

            } else {

                status.text = "Record not found"

                address.text = ""

                phone.text = ""

            }

            contactDB.close()

        } else {

            print("Error: \(contactDB.lastErrorMessage())")

        }

 }




위의 코드는  "핵심만 골라 배우는 ios 9 프로그래밍 (닐스미스 지음/ 황반석 옮김)" 에 있는 예제를 보고 작성하였습니다.

+ Recent posts