Swift 버전의 SQLite 도움말 클래스

9879 단어 sqliteswift

SQLiteHelper


SQLiteHelper 클래스 만들기

///  SQLite        
///
///          SQLite          
class SQLiteHelper
{
    //     ...
}

단례

private static let instance = SQLiteHelper()
///             
class var sharedInstance: SQLiteHelper
{
    return instance
}

전역 변수

var db: COpaquePointer = nil

데이터베이스 열기

///      
///
/// :param: dbName      
///
/// :returns:          
func openDatabase(dbName: String) -> Bool
{
    let path = dbName.documentPath()
    println(path)
    return sqlite3_open(path, &db) == SQLITE_OK
}

예제 데이터 테이블 만들기

///    T_Department   T_Employee  
///
/// :returns:          
func createTable() -> Bool
{
    let sql = "CREATE TABLE 
"
+ "IF NOT EXISTS T_Department (
"
+ "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"
+ "DepartmentNo CHAR(10) NOT NULL DEFAULT '',
"
+ "Name CHAR(50) NOT NULL DEFAULT ''
"
+ ");
"
+ "CREATE TABLE IF NOT EXISTS T_Employee (
"
+ "'id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
" + "'name' TEXT NOT NULL,
" + "'age' INTEGER NOT NULL,
" + "'department_id' INTEGER,
" + "CONSTRAINT 'FK_DEP_ID' FOREIGN KEY ('department_id') REFERENCES 'T_Department' ('id')
" + ");" // return execSql(sql) }

INSERT, UPDATE, DELETE 문 실행

///   INSERT、UPDATE、DELETE SQL  
///
/// :param: sql SQL  
///
/// :returns:          
func execSql(sql: String) -> Bool
{
    //     
   return sqlite3_exec(db, sql.cStringUsingEncoding(NSUTF8StringEncoding)!, nil, nil, nil) == ITE_OK
}

실행 SQL 문 반환 결과 수

///   SQL         
///
/// :param: sql SQL  
///
/// :returns:      
func execCount(sql: String) -> Int
{
    let record = execRecordSet(sql)
    //     
    return (record[0] as! [AnyObject])[0] as! Int
}

실행 반환 단일 레코드

///         
///
/// :param: sql SQL  
///
/// :returns:        
func execRow(sql: String) -> [AnyObject]?
{
    let record = execRecordSet(sql)

    if record.count > 0
    {
        return (record[0] as! [AnyObject])
    }
    else
    {
        return nil
    }
}

SQL 반환 결과 집합 실행

///    SQL       
///
/// :param: sql SQL  
///
/// :returns:          
func execRecordSet(sql: String) -> [AnyObject]
{
    var stmt: COpaquePointer = nil
    var recordList = [AnyObject]()
    if sqlite3_prepare_v2(db, sql.cStringUsingEncoding(NSUTF8StringEncoding)!, -1, &stmt, nil) == TE_OK
    {
        while sqlite3_step(stmt) == SQLITE_ROW
        {
            recordList.append(singleData(stmt)!)
        }
    }
    //     
    sqlite3_finalize(stmt)
    //     
    return recordList
}

한 줄 데이터 실행하기

///       
///
/// :param: stmt      
///
/// :returns:         
func singleData(stmt: COpaquePointer) -> [AnyObject]?
{
    var result = [AnyObject]()
    //        
    let count = sqlite3_column_count(stmt)

    // #define SQLITE_INTEGER 1
    // #define SQLITE_FLOAT 2
    // #define SQLITE_BLOB 4
    // #define SQLITE_NULL 5
    // #ifdef SQLITE_TEXT
    // # undef SQLITE_TEXT
    // #else
    // # define SQLITE_TEXT 3
    // #endif
    // #define SQLITE3_TEXT 3

    for index in 0..<count
    {
        let type = sqlite3_column_type(stmt, index)
        //        ,       
        switch type {
        case SQLITE_INTEGER:
            result.append(Int(sqlite3_column_int64(stmt, index)))
        case SQLITE_FLOAT:
            result.append(sqlite3_column_double(stmt, index))
        case SQLITE_NULL:
            result.append(NSNull())
        case SQLITE_TEXT:
            let rrrrr: UnsafePointer<UInt8> = sqlite3_column_text(stmt, index)
            let chars = UnsafePointer<CChar>(sqlite3_column_text(stmt, index))
            let str = String(CString: chars, encoding: NSUTF8StringEncoding)!
            result.append(str)
        case let type:
            println("       \(type)")
        }
    }
    //     
    return result
}

좋은 웹페이지 즐겨찾기