Swift에서 FMDB 사용
소개
Swift에서 퀴즈 앱을 만들 때 문제 관리를 SQLite로 수행하기 위해 Objective-C 시대에 이용한 라이브러리 FMDB를 사용하기로 했다.
환경
사용한 것
Xcode 6.3.1
iOS 8.3
[FMDB Ver2.5][1]
[Lita][2]
소개
첫째, 프로젝트를 만든 후
FMDB를 DL
fmdb를 프로젝트를 여는 Xcode로 드래그 앤 드롭
Create groups를 선택하여 추가
다음으로 NewFile→Hedder File을 선택
파일 이름
プロジェクト名-Bridging-Header.h
작성
파일을 열면
이렇게되어 있기 때문에 FMDB를 가져옵니다.
#import "FMDatabase.h"
#import "FMResultSet.h"
#import "FMDatabaseAdditions.h"
#import "FMDatabaseQueue.h"
#import "FMDatabasePool.h"
타겟
Build Setting → Swift Compiler - Code Generation → Objective-C Bridging Header
를 선택하여 다음을 위해 설명
プロジェクト名/プロジェクト名-Bridging-Header.h
이제 사용할 수 있어야합니다.
사용법
터미널에서 db 만들기
sqlite3 データベース名
sqlite> .schema
.schema를 입력하면 파일이 생성되므로
Lita에서 열고 테이블 추가
데이터 입력을 마친 db를 프로젝트로 드래그 앤 드롭
아래 코드에서 빌드 후 Documents 폴더에 db가 없으면 복사하려고합니다.
setSqlite()를 ViewDidLoad 등으로 호출해 준다
func setPath()->(String){
// /Documentsまでのパスを取得
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true)
// <Application>/Documents/test.db というパスを生成
let _path = paths[0].stringByAppendingPathComponent("test.db")
return _path
}
func setSqlite(){
if NSFileManager.defaultManager().fileExistsAtPath(setPath()) == false {
//ファイルがない場合はコピー
let defaltDBPath :String = NSBundle.mainBundle().pathForResource("test.db", ofType:nil)!
NSFileManager.defaultManager().copyItemAtPath(defaltDBPath, toPath: setPath(), error: nil)
if NSFileManager.defaultManager().fileExistsAtPath(setPath()) == false {
//error
println("Copy error = " + defaltDBPath)
}
}else{
println("DB file OK")
}
}
sql을 아래와 같이 기술해 값을 취득했습니다.
let db = FMDatabase(path: setPath())
let quiz_sql = "SELECT * FROM quiz_tb where id = \(qNum);"
db.open()
let quiz_results = db.executeQuery(quiz_sql, withArgumentsInArray: nil)
while quiz_results.next() {
// カラム名を指定して値を取得する方法
question = quiz_results.stringForColumn("question") //questionにStringでquestionを代入
answer = quiz_results.stringForColumn("answer")
commentary = quiz_results.stringForColumn("commentary")
}
db.close()
문제점
이 설명이라면 대형 데이터를 편집하여 프로젝트에 덮어 쓰면
이미 실제 기계와 에뮬레이터에 db가 있기 때문에 복사되지 않습니다.
일단 앱을 제거한 다음 다시 빌드해야합니다.
해결책으로
NSFileManager.defaultManager().removeItemAtPath(setPath(), error: nil)
let defaltDBPath :String = NSBundle.mainBundle().pathForResource("test.db", ofType:nil)!
NSFileManager.defaultManager().copyItemAtPath(defaltDBPath, toPath: setPath(), error: nil)
파일이 있는지 없는지의 판정으로, 있으면 Remove하고 나서 추가하도록(듯이) 기술하는 것으로 해결했습니다.
기타 Sql을 작성하는 방법
[여기][3]의 기사를 참고로 받을 수 있으면 좋다고 생각합니다.
[1]: htps : // 기주 b. m/cc s/fmdb
[2] : h tp // w w. 그럼 ts. 이 m/d 루파 l/? q=이므로/58
[3] : htp : ///bぉ기오 s. s ck3. 네 t/아 r ゔぇ s/2610
Reference
이 문제에 관하여(Swift에서 FMDB 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Hakota/items/39a7c55b21466d561bf9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
사용한 것
Xcode 6.3.1
iOS 8.3
[FMDB Ver2.5][1]
[Lita][2]
소개
첫째, 프로젝트를 만든 후
FMDB를 DL
fmdb를 프로젝트를 여는 Xcode로 드래그 앤 드롭
Create groups를 선택하여 추가
다음으로 NewFile→Hedder File을 선택
파일 이름
プロジェクト名-Bridging-Header.h
작성
파일을 열면
이렇게되어 있기 때문에 FMDB를 가져옵니다.
#import "FMDatabase.h"
#import "FMResultSet.h"
#import "FMDatabaseAdditions.h"
#import "FMDatabaseQueue.h"
#import "FMDatabasePool.h"
타겟
Build Setting → Swift Compiler - Code Generation → Objective-C Bridging Header
를 선택하여 다음을 위해 설명
プロジェクト名/プロジェクト名-Bridging-Header.h
이제 사용할 수 있어야합니다.
사용법
터미널에서 db 만들기
sqlite3 データベース名
sqlite> .schema
.schema를 입력하면 파일이 생성되므로
Lita에서 열고 테이블 추가
데이터 입력을 마친 db를 프로젝트로 드래그 앤 드롭
아래 코드에서 빌드 후 Documents 폴더에 db가 없으면 복사하려고합니다.
setSqlite()를 ViewDidLoad 등으로 호출해 준다
func setPath()->(String){
// /Documentsまでのパスを取得
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true)
// <Application>/Documents/test.db というパスを生成
let _path = paths[0].stringByAppendingPathComponent("test.db")
return _path
}
func setSqlite(){
if NSFileManager.defaultManager().fileExistsAtPath(setPath()) == false {
//ファイルがない場合はコピー
let defaltDBPath :String = NSBundle.mainBundle().pathForResource("test.db", ofType:nil)!
NSFileManager.defaultManager().copyItemAtPath(defaltDBPath, toPath: setPath(), error: nil)
if NSFileManager.defaultManager().fileExistsAtPath(setPath()) == false {
//error
println("Copy error = " + defaltDBPath)
}
}else{
println("DB file OK")
}
}
sql을 아래와 같이 기술해 값을 취득했습니다.
let db = FMDatabase(path: setPath())
let quiz_sql = "SELECT * FROM quiz_tb where id = \(qNum);"
db.open()
let quiz_results = db.executeQuery(quiz_sql, withArgumentsInArray: nil)
while quiz_results.next() {
// カラム名を指定して値を取得する方法
question = quiz_results.stringForColumn("question") //questionにStringでquestionを代入
answer = quiz_results.stringForColumn("answer")
commentary = quiz_results.stringForColumn("commentary")
}
db.close()
문제점
이 설명이라면 대형 데이터를 편집하여 프로젝트에 덮어 쓰면
이미 실제 기계와 에뮬레이터에 db가 있기 때문에 복사되지 않습니다.
일단 앱을 제거한 다음 다시 빌드해야합니다.
해결책으로
NSFileManager.defaultManager().removeItemAtPath(setPath(), error: nil)
let defaltDBPath :String = NSBundle.mainBundle().pathForResource("test.db", ofType:nil)!
NSFileManager.defaultManager().copyItemAtPath(defaltDBPath, toPath: setPath(), error: nil)
파일이 있는지 없는지의 판정으로, 있으면 Remove하고 나서 추가하도록(듯이) 기술하는 것으로 해결했습니다.
기타 Sql을 작성하는 방법
[여기][3]의 기사를 참고로 받을 수 있으면 좋다고 생각합니다.
[1]: htps : // 기주 b. m/cc s/fmdb
[2] : h tp // w w. 그럼 ts. 이 m/d 루파 l/? q=이므로/58
[3] : htp : ///bぉ기오 s. s ck3. 네 t/아 r ゔぇ s/2610
Reference
이 문제에 관하여(Swift에서 FMDB 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Hakota/items/39a7c55b21466d561bf9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
プロジェクト名-Bridging-Header.h
#import "FMDatabase.h"
#import "FMResultSet.h"
#import "FMDatabaseAdditions.h"
#import "FMDatabaseQueue.h"
#import "FMDatabasePool.h"
プロジェクト名/プロジェクト名-Bridging-Header.h
터미널에서 db 만들기
sqlite3 データベース名
sqlite> .schema
.schema를 입력하면 파일이 생성되므로
Lita에서 열고 테이블 추가
데이터 입력을 마친 db를 프로젝트로 드래그 앤 드롭
아래 코드에서 빌드 후 Documents 폴더에 db가 없으면 복사하려고합니다.
setSqlite()를 ViewDidLoad 등으로 호출해 준다
func setPath()->(String){
// /Documentsまでのパスを取得
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true)
// <Application>/Documents/test.db というパスを生成
let _path = paths[0].stringByAppendingPathComponent("test.db")
return _path
}
func setSqlite(){
if NSFileManager.defaultManager().fileExistsAtPath(setPath()) == false {
//ファイルがない場合はコピー
let defaltDBPath :String = NSBundle.mainBundle().pathForResource("test.db", ofType:nil)!
NSFileManager.defaultManager().copyItemAtPath(defaltDBPath, toPath: setPath(), error: nil)
if NSFileManager.defaultManager().fileExistsAtPath(setPath()) == false {
//error
println("Copy error = " + defaltDBPath)
}
}else{
println("DB file OK")
}
}
sql을 아래와 같이 기술해 값을 취득했습니다.
let db = FMDatabase(path: setPath())
let quiz_sql = "SELECT * FROM quiz_tb where id = \(qNum);"
db.open()
let quiz_results = db.executeQuery(quiz_sql, withArgumentsInArray: nil)
while quiz_results.next() {
// カラム名を指定して値を取得する方法
question = quiz_results.stringForColumn("question") //questionにStringでquestionを代入
answer = quiz_results.stringForColumn("answer")
commentary = quiz_results.stringForColumn("commentary")
}
db.close()
문제점
이 설명이라면 대형 데이터를 편집하여 프로젝트에 덮어 쓰면
이미 실제 기계와 에뮬레이터에 db가 있기 때문에 복사되지 않습니다.
일단 앱을 제거한 다음 다시 빌드해야합니다.
해결책으로
NSFileManager.defaultManager().removeItemAtPath(setPath(), error: nil)
let defaltDBPath :String = NSBundle.mainBundle().pathForResource("test.db", ofType:nil)!
NSFileManager.defaultManager().copyItemAtPath(defaltDBPath, toPath: setPath(), error: nil)
파일이 있는지 없는지의 판정으로, 있으면 Remove하고 나서 추가하도록(듯이) 기술하는 것으로 해결했습니다.
기타 Sql을 작성하는 방법
[여기][3]의 기사를 참고로 받을 수 있으면 좋다고 생각합니다.
[1]: htps : // 기주 b. m/cc s/fmdb
[2] : h tp // w w. 그럼 ts. 이 m/d 루파 l/? q=이므로/58
[3] : htp : ///bぉ기오 s. s ck3. 네 t/아 r ゔぇ s/2610
Reference
이 문제에 관하여(Swift에서 FMDB 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Hakota/items/39a7c55b21466d561bf9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
NSFileManager.defaultManager().removeItemAtPath(setPath(), error: nil)
let defaltDBPath :String = NSBundle.mainBundle().pathForResource("test.db", ofType:nil)!
NSFileManager.defaultManager().copyItemAtPath(defaltDBPath, toPath: setPath(), error: nil)
파일이 있는지 없는지의 판정으로, 있으면 Remove하고 나서 추가하도록(듯이) 기술하는 것으로 해결했습니다.
기타 Sql을 작성하는 방법
[여기][3]의 기사를 참고로 받을 수 있으면 좋다고 생각합니다.
[1]: htps : // 기주 b. m/cc s/fmdb
[2] : h tp // w w. 그럼 ts. 이 m/d 루파 l/? q=이므로/58
[3] : htp : ///bぉ기오 s. s ck3. 네 t/아 r ゔぇ s/2610
Reference
이 문제에 관하여(Swift에서 FMDB 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Hakota/items/39a7c55b21466d561bf9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Swift에서 FMDB 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Hakota/items/39a7c55b21466d561bf9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)