iOS第三方之FMDB
FMDB有三個主要的類
1.FMDatabase – 表示一個單獨的SQLite數據庫。 用來執行SQLite的命令。
2.FMResultSet – 表示FMDatabase執行查詢后結果集
3.FMDatabaseQueue – 如果你想在多線程中執行多個查詢或更新,你應該使用該類。這是線程安全的。
數據庫創建
創建FMDatabase對象時參數為SQLite數據庫文件路徑。該路徑可以是以下三種之一:
1..文件路徑。該文件路徑無需真實存,如果不存在會自動創建。
2..空字符串(@”")。表示會在臨時目錄創建一個空的數據庫,當FMDatabase 鏈接關閉時,文件也被刪除。
3.NULL. 將創建一個內在數據庫。同樣的,當FMDatabase連接關閉時,數據會被銷毀。
如需對臨時數據庫或內在數據庫進行一步了解,請繼續閱讀:點擊打開鏈接
打開數據庫
在和數據庫交互 之前,數據庫必須是打開的。如果資源或權限不足無法打開或創建數據庫,都會導致打開
- <pre name="code" class="objc"> if (![_db open]) {
- NSLog(@"數據庫打開失敗");
- return NO;
- }
執行更新
一切不是SELECT命令的命令都視為更新。這包括 CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE (等)。
簡單來說,只要不是以SELECT開頭的命令都是UPDATE命令。
執行更新返回一個BOOL值。YES表示執行成功,否則表示有那些錯誤 。你可以調用 -lastErrorMessage 和 -lastErrorCode方法來得到更多信息。
舉個例子:插入一個Student數據
- // 兩種寫sql語句方式
- NSString *sqlStr = [NSString stringWithFormat:@"insert into student values ('%@', '%@', '%@')", student.number, student.name, student.age];
- NSLog(@"%@", sqlStr);
- BOOL result = [_db executeUpdate:sqlStr];<pre name="code" class="objc" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 25px;">// BOOL result = [_db executeUpdate:@"insert into student (number, name, age) values (?,?,?)", student.number, student.name, student.age];
- [self judgeDBError:result action:DATABASE_INSERT]; return result;
- /**
- * 打印執行SQL語句的狀態
- *
- * @param judge SQL語句的執行:成功(YES)/失敗(NO)
- * @param action SQL語句的相關操作:創建/插入/查詢/刪除
- */
- -(void)judgeDBError:(BOOL)judge action:(NSString *)action
- {
- if (!judge && [self.db hadError]) {
- //如果有錯誤,打印錯誤信息
- NSLog(@"%@失敗:%@",action,[self.db lastError]);
- }
- else
- {
- NSLog(@"%@成功",action);
- }
- }
執行查詢
SELECT命令就是查詢,執行查詢的方法是以 -excuteQuery開頭的。
執行查詢時,如果成功返回FMResultSet對象, 錯誤返回nil. 與執行更新相當,支持使用 NSError**參數。同時,你也可以使用 -lastErrorCode和-lastErrorMessage獲知錯誤信息。
- FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"];
- while ([s next]) {
- //retrieve values for each record
- }
舉個例子:
- -(NSMutableArray *)selectAllStudents
- {
- FMResultSet *set = [_db executeQuery:@"select * from student"];
- return [self selectAllStudentsHelper:set];
- }
為了數據查找的通用性,寫了一個通用方法查找Student數據
- (NSMutableArray *)selectAllStudentsHelper:(FMResultSet *)FMSet;
- -(NSMutableArray *)selectAllStudentsHelper:(FMResultSet *)FMSet
- {
- NSMutableArray * selectResult = [NSMutableArray array];
- while ([FMSet next]) {
- Student * stu = [[Student alloc] init];
- stu.number = [FMSet stringForColumn:@"number"];
- stu.name = [FMSet stringForColumn:@"name"];
- stu.age = [FMSet stringForColumn:@"age"];
- /**
- * 各種不同類型的值有不同的取法.
- * int a = [FMSet intForColumn:@"a"],
- * NSString * b = [FMSet stringForColumn:@"b"],
- * NSData * c = [FMSet dateForColumn:@"c"],
- * float d = [FMSet doubleForColumn:@"d"],
- */
- [selectResult addObject:stu];
- }
- return selectResult;
- }
FMResultSet 提供了很多方法來獲得所需的格式的值:
intForColumn:
longForColumn:
longLongIntForColumn:
boolForColumn:
doubleForColumn:
stringForColumn:
dataForColumn:
dataNoCopyForColumn:
UTF8StringForColumnIndex:
objectForColumn:
本文鏈接:http://my.oschina.net/CgShare/blog/293635