您好,登錄后才能下訂單哦!
這篇文章主要講解了“Swift版的SQLite幫助類怎么創(chuàng)建”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Swift版的SQLite幫助類怎么創(chuàng)建”吧!
/// SQLite數(shù)據(jù)庫處理幫助類 /// /// 此類中封裝了關(guān)于SQLite數(shù)據(jù)庫處理的業(yè)務(wù)函數(shù) class SQLiteHelper { // 業(yè)務(wù)代碼...}
private static let instance = SQLiteHelper()/// 單例 全局的數(shù)據(jù)訪問接口class var sharedInstance: SQLiteHelper {return instance }
var db: COpaquePointer = nil
/// 打開數(shù)據(jù)庫////// :param: dbName 數(shù)據(jù)庫名稱////// :returns: 返回 是否打開成功func openDatabase(dbName: String) -> Bool {let path = dbName.documentPath() println(path)return sqlite3_open(path, &db) == SQLITE_OK }
/// 創(chuàng)建 T_Department 和 T_Employee 表////// :returns: 返回 是否創(chuàng)建成功func createTable() -> Bool { let sql = "CREATE TABLE \n" +"IF NOT EXISTS T_Department (\n" +"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" +"DepartmentNo CHAR(10) NOT NULL DEFAULT '',\n" +"Name CHAR(50) NOT NULL DEFAULT '' \n" +"); \n" +"CREATE TABLE IF NOT EXISTS T_Employee ( \n" +"'id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \n" + "'name' TEXT NOT NULL, \n" + "'age' INTEGER NOT NULL, \n" + "'department_id' INTEGER, \n" + "CONSTRAINT 'FK_DEP_ID' FOREIGN KEY ('department_id') REFERENCES 'T_Department' ('id') \n" + ");" // 返回結(jié)果 return execSql(sql) }
/// 執(zhí)行INSERT、UPDATE、DELETE SQL語句////// :param: sql SQL語句////// :returns: 返回 是否執(zhí)行成功func execSql(sql: String) -> Bool {// 返回結(jié)果 return sqlite3_exec(db, sql.cStringUsingEncoding(NSUTF8StringEncoding)!, nil, nil, nil) == ITE_OK }
/// 執(zhí)行SQL語句 返回結(jié)果數(shù)量////// :param: sql SQL語句////// :returns: 返回 結(jié)果func execCount(sql: String) -> Int {let record = execRecordSet(sql)// 返回結(jié)果return (record[0] as! [AnyObject])[0] as! Int }
/// 執(zhí)行返回單條記錄////// :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 } }
/// 執(zhí)行 SQL 返回結(jié)果集合////// :param: sql SQL語句////// :returns: 返回 查詢的結(jié)果集func execRecordSet(sql: String) -> [AnyObject] {var stmt: COpaquePointer = nilvar 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)// 返回結(jié)果return recordList }
/// 執(zhí)行一行數(shù)據(jù)////// :param: stmt 執(zhí)行的語句////// :returns: 返回一行數(shù)據(jù)數(shù)組func singleData(stmt: COpaquePointer) -> [AnyObject]? {var result = [AnyObject]()// 返回該表的列數(shù)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 3for index in 0..<count {let type = sqlite3_column_type(stmt, index)// 根據(jù)字段的類型,提取對(duì)應(yīng)列的值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)") } }// 返回結(jié)果return result }
感謝各位的閱讀,以上就是“Swift版的SQLite幫助類怎么創(chuàng)建”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Swift版的SQLite幫助類怎么創(chuàng)建這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。