Notice
Recent Posts
Recent Comments
Link
투케이2K
391. (ios/swift5) [SQLite] createTable : SQLITE 테이블 생성 수행 - sqlite3_exec 본문
IOS
391. (ios/swift5) [SQLite] createTable : SQLITE 테이블 생성 수행 - sqlite3_exec
투케이2K 2023. 12. 17. 09:55[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT5
[소스 코드]
// -----------------------------------------------------------------------------------------
// MARK: - [SEARCH FAST] : createTable : SQLITE 테이블 생성 수행
// -----------------------------------------------------------------------------------------
func createTable(folderName: String, dbName: String, tableName: String, keyColumnName: String, valueColumnName: String) -> Bool {
/*
// -----------------------------------------
[createTable 메소드 설명]
// -----------------------------------------
1. SQLITE 테이블 생성 수행
// -----------------------------------------
2. 호출 방법 :
S_SQLite().createTable(folderName: "DataBaseFolder", dbName: "app.sqlite", tableName: "preferences", keyColumnName: "MY_KEY", valueColumnName: "MY_VALUE")
// -----------------------------------------
3. 리턴 데이터 :
true / false
// -----------------------------------------
4. 참고 info plist 설정 :
아이폰 파일 접근 설정 : Supports opening documents in place : YES
아이튠즈 공유 설정 : Application supports iTunes file sharing : YES
// -----------------------------------------
*/
// [변수 선언]
var returnData = false
var M_LOG = ""
var fileWritePath = ""
// [로직 처리 실시]
var documentsUrl: URL? = nil
do {
documentsUrl = try FileManager.default.url(
for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: false)
} catch {
M_LOG = "[Error] :: \(error.localizedDescription)"
}
if documentsUrl != nil && C_Util().stringNotNull(str: folderName) == true && C_Util().stringNotNull(str: dbName) == true
&& C_Util().stringNotNull(str: tableName) == true && C_Util().stringNotNull(str: keyColumnName) == true
&& C_Util().stringNotNull(str: valueColumnName) == true {
if C_Util().stringNotNull(str: documentsUrl?.description ?? "") == true {
fileWritePath = documentsUrl?.appendingPathComponent(folderName).path ?? ""
if FileManager.default.fileExists(atPath: fileWritePath) == false { // [저장 된 경로 없음 >> 폴더 생성 실시]
do {
// [로직 처리 변수 선언]
var checkError = false
// [디렉토리 생성 유무 확인]
try FileManager.default.createDirectory(atPath: fileWritePath, withIntermediateDirectories: true, attributes: nil)
if (fileWritePath.hasSuffix("/") == true){
fileWritePath = fileWritePath + dbName
}
else {
fileWritePath = fileWritePath + "/" + dbName
}
M_LOG = "[First Folder Create] :: "
var db: OpaquePointer? = nil // [SQLite 전용 포인터]
if sqlite3_open(fileWritePath, &db) == SQLITE_OK {
checkError = true
}
else {
M_LOG += "[Error] :: Create DB"
}
// [테이블 생성 수행]
if checkError == true {
let CREATE_QUERY_TEXT : String = "CREATE TABLE IF NOT EXISTS \(tableName) (\(keyColumnName) TEXT, \(valueColumnName) TEXT)"
if sqlite3_exec(db, CREATE_QUERY_TEXT, nil, nil, nil) != SQLITE_OK {
let errMsg = String(cString:sqlite3_errmsg(db))
M_LOG += "[Error] :: Table Create Error :: \(errMsg)"
}
else {
M_LOG += "[Success] :: Table Create Query :: \(CREATE_QUERY_TEXT)"
returnData = true
}
}
} catch {
M_LOG = "[Exception] :: \(error.localizedDescription)"
}
}
else { // [폴더 >> 있음]
M_LOG = "[Folder Exists] :: "
if (fileWritePath.hasSuffix("/") == true){
fileWritePath = fileWritePath + dbName
}
else {
fileWritePath = fileWritePath + "/" + dbName
}
// [로직 처리 변수 선언]
var checkError = false
var db: OpaquePointer? = nil // [SQLite 전용 포인터]
if sqlite3_open(fileWritePath, &db) == SQLITE_OK {
checkError = true
}
else {
M_LOG += "[Error] :: Create DB"
}
// [테이블 생성 수행]
if checkError == true {
let CREATE_QUERY_TEXT : String = "CREATE TABLE IF NOT EXISTS \(tableName) (\(keyColumnName) TEXT, \(valueColumnName) TEXT)"
if sqlite3_exec(db, CREATE_QUERY_TEXT, nil, nil, nil) != SQLITE_OK {
let errMsg = String(cString:sqlite3_errmsg(db))
M_LOG += "[Error] :: Table Create Error :: \(errMsg)"
}
else {
M_LOG += "[Success] :: Table Create Query :: \(CREATE_QUERY_TEXT)"
returnData = true
}
}
}
}
else {
M_LOG = "[ERROR] :: documentsUrl Is Null"
}
}
else {
M_LOG = "[ERROR] :: Input Data Is Null"
}
// [로그 출력 실시]
S_Log._D_(description: "SQLITE 테이블 생성 수행", data: [
"INPUT [folderName] :: \(folderName)",
"INPUT [dbName] :: \(dbName)",
"INPUT [tableName] :: \(tableName)",
"INPUT [keyColumnName] :: \(keyColumnName)",
"INPUT [valueColumnName] :: \(valueColumnName)",
"M_LOG :: \(M_LOG)",
"SAVE_PATH :: \(fileWritePath)",
"RETURN :: \(returnData)"
])
// [리턴 반환 수행]
return returnData
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
Comments