투케이2K

390. (ios/swift5) [SQLite] createDB : SQLITE 데이터베이스 생성 수행 - sqlite3_open 본문

IOS

390. (ios/swift5) [SQLite] createDB : SQLITE 데이터베이스 생성 수행 - sqlite3_open

투케이2K 2023. 12. 16. 11:59
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // MARK: - [SEARCH FAST] : createDB : SQLITE 데이터베이스 생성 수행
    // -----------------------------------------------------------------------------------------
    func createDB(folderName: String, dbName: String) -> String {
        
        /*
        // -----------------------------------------
        [createDB 메소드 설명]
        // -----------------------------------------
        1. SQLITE 데이터베이스 생성 수행
        // -----------------------------------------
        2. 호출 방법 :
         
         S_SQLite().createDB(folderName: "DataBaseFolder", dbName: "app.sqlite")
        // -----------------------------------------
        3. 리턴 데이터 :
         
         DB 생성 경로 path
        // -----------------------------------------
        4. 참고 info plist 설정 :
         
         아이폰 파일 접근 설정 : Supports opening documents in place : YES
         아이튠즈 공유 설정 : Application supports iTunes file sharing : YES
        // -----------------------------------------
        */
        
        
        // [변수 선언]
        var returnData = ""
        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: dbName) == true {
                    
            if C_Util().stringNotNull(str: documentsUrl?.description ?? "") == true {
                
                if C_Util().stringNotNull(str: folderName) == true { // [폴더 명칭이 널이 아닌 경우]
                    
                    fileWritePath = documentsUrl?.appendingPathComponent(folderName).path ?? ""
                    
                    if FileManager.default.fileExists(atPath: fileWritePath) == false { // [저장 된 경로 없음 >> 폴더 생성 실시]
                        do {
                            
                            // [디렉토리 생성 유무 확인]
                            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 {
                                M_LOG += "[Success] :: Create DB"
                                returnData = fileWritePath
                            }
                            else {
                                M_LOG += "[Error] :: Create DB"
                            }
                            
                        } catch {
                            M_LOG = "[Exception] :: \(error.localizedDescription)"
                        }
                    }
                    else { // [폴더 >> 있음]
                        M_LOG = "[Folder Exists] :: "
                        
                        if (fileWritePath.hasSuffix("/") == true){
                            fileWritePath = fileWritePath + dbName
                        }
                        else {
                            fileWritePath = fileWritePath + "/" + dbName
                        }
                        
                        var db: OpaquePointer? = nil // [SQLite 전용 포인터]
                        if sqlite3_open(fileWritePath, &db) == SQLITE_OK {
                            M_LOG += "[Success] :: Create DB"
                            returnData = fileWritePath
                        }
                        else {
                            M_LOG += "[Error] :: Create DB"
                        }
                        
                    }
                    
                }
                else { // [폴더 명칭 없음 >> document 에 저장]
                    M_LOG = "[Folder Default] :: "
                    
                    fileWritePath = documentsUrl?.path ?? ""
                    
                    if (fileWritePath.hasSuffix("/") == true){
                        fileWritePath = fileWritePath + dbName
                    }
                    else {
                        fileWritePath = fileWritePath + "/" + dbName
                    }
                    
                    var db: OpaquePointer? = nil // [SQLite 전용 포인터]
                    if sqlite3_open(fileWritePath, &db) == SQLITE_OK {
                        M_LOG += "[Success] :: Create DB"
                        returnData = fileWritePath
                    }
                    else {
                        M_LOG += "[Error] :: Create DB"
                    }
                    
                }
                
            }
            else {
                M_LOG = "[ERROR] :: documentsUrl Is Null"
            }
            
        }
        else {
            M_LOG = "[ERROR] :: documentDirectory And File Name Is Null"
        }

        
        // [로그 출력 실시]
        S_Log._D_(description: "SQLITE 데이터베이스 생성 수행", data: [
            "INPUT [folderName] :: \(folderName)",
            "INPUT [dbName] :: \(dbName)",
            "M_LOG :: \(M_LOG)",
            "SAVE_PATH :: \(fileWritePath)",
            "RETURN :: \(returnData)"
        ])
        
        
        // [리턴 반환 수행]
        return returnData
        
    }

[결과 출력]


 

반응형
Comments