Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ios
- Human interface guide
- Refactoring
- RxCocoa
- combine
- 애니메이션
- swiftUI
- SWIFT
- Observable
- Xcode
- swift documentation
- uitableview
- 클린 코드
- 리팩토링
- tableView
- Clean Code
- ribs
- collectionview
- uiscrollview
- 리펙터링
- 리펙토링
- Protocol
- clean architecture
- 스위프트
- map
- MVVM
- UITextView
- rxswift
- HIG
- UICollectionView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 8. SQLite DBMS를 iOS에서 사용방법 (기본), 브리지 헤더 사용방법 본문
iOS 실전 (swift)/데이터베이스
[iOS - swift] 8. SQLite DBMS를 iOS에서 사용방법 (기본), 브리지 헤더 사용방법
jake-kim 2020. 5. 9. 21:131. 라이브러리 세팅
1) libsqlite3.tbd
2) sqlite3는 c,c++로 되어있으므로 브리지 헤더로 임포트 해야함
추가 -> Header File -> 이름 입력후 저장
3) 브리지 헤더 추가
target -> Build Settings -> All, Combined탭 선택
-> swift Compiler - General -> Objective-C Bridging Header에 아까 추가한 파일의 디렉토리명 복붙
4) 만든 브리지 헤더 파일에 sqlite3.h임포트
2. DB연결과 테이블 생성
1) DB와 연관된 필수 객체 2개 정의 (OpaquePointer자료형)
- DB와 연결하는 객체
- SQL문자열이 컴파일 정보가 저장될 stmt
2) DB가 저장될 디렉토리 생성
- 파일을 문서디렉토리(documentDirectory)에 저장하는 이유 : 일반성 (iCloud를 사용할 때도 백업 대상이 되는 디렉토리)
* NSString을 사용했을시, 위와 같은 코드
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
let dbPath = path.strings(byAppendingPaths: ["db.sqlite"])[0]
3) SQL문 작성
4) 5단계 (DB Connection ~ close connection)
sqlite3_open(dbPath, &db) /// DB connection
sqlite3_prepare(db, sql, -1, &stmt, nil) /// get SQL be compiled - stmt
sqlite3_step(stmt) /// excute SQL
sqlite3_finalize(stmt) /// unlock stmt in DB
sqlite3_close(db) /// close DB connection
위 5단계를 다음과 같이 작성
* 리펙토링
- defer블록 사용 : 함수안에서 return을 만나기 전에 defer블록을 만나게 되면, return 종료 전에 defer블록을 역순(가장 최근에 만난 defer블록)부터 실행한 후 종료되는 것
(코드상 끝(밑)에있는 defer블록먼저 실행)
(중첩 defer블록인 경우는 내부 defer블록먼저 실행 후 외부 defer블록 실행)
/// 필수로 필요한 객체 : 각각 DB와 연결할 객체와, 컴파일 된 SQL문을 담을 객체
var db: OpaquePointer? = nil /// SQLite 연결 정보를 담을 객체
guard sqlite3_open(dbPath, &db) == SQLITE_OK else {return}
defer {
print("Close DB Connection")
sqlite3_close(db)
}
var stmt: OpaquePointer? = nil
let sql = "CREATE TABLE IF NOT EXISTS sequence (num INTEGER)"
guard sqlite3_prepare(db, sql, -1, &stmt, nil) == SQLITE_OK else {return}
defer {
print("Finalize Statement")
sqlite3_finalize(stmt)
}
if sqlite3_step(stmt) == SQLITE_DONE {print("Success the Crete Table")}
}
5) DB 확인
/// db확인 : terminal열어서 open [밑주소]
print("dir = \n\(dbPath)")
'iOS 실전 (swift) > 데이터베이스' 카테고리의 다른 글
[iOS - swift] 10. FMDB 데이터베이스 (기본) (0) | 2020.05.09 |
---|---|
[iOS - swift] 9. SQLite DBMS를 iOS에서 사용방법 (템플릿 이용) (0) | 2020.05.09 |
[iOS - swift] 7. SQLite DBMS (설치부터 기본 사용방법) (0) | 2020.05.09 |
[iOS - swift] 6. SQL 4가지 쿼리문 형태 (0) | 2020.05.09 |
[iOS - swift] 5. 관계형 데이터 베이스(RDBMS)의 개념 (0) | 2020.05.09 |
Comments