Objective-c简单操作SQLite

  1 /  
  2 //  LSQLiteDB.m  
  3 //  lua-hello  
  4 //  
  5 //  Created by leiwuluan on 14-2-13.  
  6 //  Copyright (c) 2014年 hello. All rights reserved.  
  7 //  
  8   
  9 #import "LSQLiteDB.h"  
 10 #import "NSStringExtend.h"  
 11 #import "NSDataAdditions.h"  
 12 #import "NSURLAdditions.h"  
 13   
 14 @implementation LSQLiteDB  
 15   
 16 // 打开 或 创建一个数据库  
 17 - (int) openDBByDBName: (NSString *) _DBName {  
 18     NSArray *documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
 19     NSString *databaseFilePath=[[documentsPaths objectAtIndex:0] stringByAppendingPathComponent: _DBName];  
 20       
 21     if (sqlite3_open([databaseFilePath UTF8String], &database)==SQLITE_OK) {  
 22           
 23         // 创建一个缓存表  
 24         NSString *_sql = @"create table if not exists dataCache (dkey varchar(100) PRIMARY KEY, dvalue TEXT, ctype INTEGER, utime timestamp)";  
 25           
 26         charchar *errorMsg;  
 27         if (sqlite3_exec(database, [_sql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) {  
 28             NSLog(@"Create dataCache Success.");  
 29         }else {  
 30             NSLog(@"Create dataCache Failure %s",errorMsg);  
 31         }  
 32   
 33         NSLog(@"SQLites is opened.");  
 34         return YES;  
 35     }else {  
 36         NSLog(@"SQLites open Error.");  
 37         return NO;  
 38     }  
 39   
 40 }  
 41   
 42 // 执行一条slq  
 43 - (int) execBySql: (NSString *) _sql {  
 44     // create table if not exists dataCache (dkey varchar(100) PRIMARY KEY, dvalue TEXT, utime timestamp)  
 45       
 46     charchar *errorMsg;  
 47     if (sqlite3_exec(database, [_sql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) {  
 48         NSLog(@"Create Success.");  
 49         return YES;  
 50     }else {  
 51         NSLog(@"Create Failure %s",errorMsg);  
 52         return NO;  
 53     }  
 54 }  
 55   
 56 // 通过键值更新  
 57 - (int) updateRowData:(NSString *) _rowData forKey: (NSString *) _key ctype: (NSInteger) _ctype {  
 58       
 59     _rowData = [_rowData stringByReplacingOccurrencesOfString:@"" withString:@""];  
 60     NSString *_sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO dataCache(dkey, dvalue, utime, ctype) values(‘%@‘, ‘%@‘, datetime(‘now‘), %d)", _key, _rowData, _ctype];  
 61     charchar *errorMsg;  
 62     if (sqlite3_exec(database, [_sql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) {  
 63         NSLog(@"Insert Success.");  
 64         return YES;  
 65     }else {  
 66         NSLog(@"Insert Failure %s, |%@",errorMsg , _sql);  
 67         return NO;  
 68     }  
 69       
 70 }  
 71   
 72 // 缓存获取值  
 73 - (NSString *) findRowDataForKey: (NSString *) _key {  
 74     NSString *query = [NSString stringWithFormat:@"select dvalue from dataCache where dkey=‘%@‘", _key];  
 75     sqlite3_stmt *statement;  
 76     if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {  
 77         if (sqlite3_step(statement) == SQLITE_ROW) {  
 78             //get data  
 79             charchar *dvalue = (charchar *)sqlite3_column_text(statement, 0);  
 80             NSString *retDvalue = [NSString stringWithCString:dvalue encoding:NSUTF8StringEncoding];  
 81           
 82             return retDvalue;  
 83         }  
 84         sqlite3_finalize(statement);  
 85     }  
 86     return nil;  
 87 }  
 88   
 89 // 清除过期数据  
 90 - (int) clearCAData: (NSString *) cacheDate {  
 91     NSString *_sql = [NSString stringWithFormat:@"delete from dataCache where ctype = 1 and utime < ‘%@‘", cacheDate];  
 92     charchar *errorMsg;  
 93     if (sqlite3_exec(database, [_sql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) {  
 94         NSLog(@"Insert Success.");  
 95         return YES;  
 96     }else {  
 97         NSLog(@"Insert Failure %s, |%@",errorMsg , _sql);  
 98         return NO;  
 99     }  
100 }  
101   
102 // 关闭数据库  
103 -(int) closeDatabase {  
104     sqlite3_close(database);  
105     return YES;  
106 }  
107   
108 -(void) dealloc{  
109     [super dealloc];  
110     [self closeDatabase];  
111 }  
112   
113   
114 -(NSMutableArray*) queryBySQL:(NSString *) sql  
115 {  
116     NSMutableArray *result = [[NSMutableArray alloc]init];  
117     sqlite3_stmt *stmt;  
118     if (sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt, nil) == SQLITE_OK) {  
119 //        int num_cols = sqlite3_data_count(stmt);  
120         while (sqlite3_step(stmt)==SQLITE_ROW) {  
121             int num_cols = sqlite3_column_count(stmt);  
122             NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols];  
123             if (num_cols > 0) {  
124                 int i;  
125                 for (i = 0; i < num_cols; i++) {  
126                     const charchar *col_name = sqlite3_column_name(stmt, i);  
127                     if (col_name) {  
128                         NSString *colName = [NSString stringWithUTF8String:col_name];  
129                         id value = nil;  
130                         // fetch according to type  
131                         switch (sqlite3_column_type(stmt, i)) {  
132                             case SQLITE_INTEGER: {  
133                                 int i_value = sqlite3_column_int(stmt, i);  
134                                 value = [NSNumber numberWithInt:i_value];  
135                                 break;  
136                             }  
137                             case SQLITE_FLOAT: {  
138                                 double d_value = sqlite3_column_double(stmt, i);  
139                                 value = [NSNumber numberWithDouble:d_value];  
140                                 break;  
141                             }  
142                             case SQLITE_TEXT: {  
143                                 charchar *c_value = (charchar *)sqlite3_column_text(stmt, i);  
144                                 value = [[NSString alloc] initWithUTF8String:c_value];  
145                                 break;  
146                             }  
147                             case SQLITE_BLOB: {  
148                                 value = sqlite3_column_blob(stmt, i);  
149                                 break;  
150                             }  
151                         }  
152                         // save to dict  
153                         if (value) {  
154                             [dict setObject:value forKey:colName];  
155                         }  
156                     }  
157                 }  
158             }  
159             [result addObject:dict];  
160         }  
161         /* 
162         while (sqlite3_step(stmt)==SQLITE_ROW) { 
163             char *name = (char *)sqlite3_column_text(stmt, 1); 
164             NSString *nameString = [[NSString alloc] initWithUTF8String:name]; 
165             NSLog(@"%@", nameString); 
166         }*/  
167         sqlite3_finalize(stmt);  
168     }  
169     return result;  
170 }  
171   
172 // 判断表是否存在  
173 -(int) tableIsExists:(NSString*) tableName  
174 {  
175     NSString *sql = [NSString stringWithFormat:@"SELECT count(*) as count_num FROM sqlite_master WHERE type=\"table\" AND name = \"%@\"", tableName ];  
176     NSMutableArray *arr = [self queryBySQL: sql];  
177     NSMutableDictionary *dic = [arr objectAtIndex:0];  
178    return (int)[dic valueForKey:@"count_num"];  
179 }  
180 @end  

原文地址:http://blog.csdn.net/zhang_red/article/details/20923287

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。