http://blog.csdn.net/iunion/article/details/7204625

仅供自己记录使用,

h文件

  1. #import <Foundation/Foundation.h>
  2. #import "FMDatabase.h"
  3. #import "FMDatabaseAdditions.h"
  4. @interface wiDBRoot : NSObject
  5. @property (retain, nonatomic) FMDatabase *DB;
  6. @property (retain, nonatomic) NSString *DBName;
  7. //+ (id)modelWithDBName:(NSString *)dbName;
  8. - (id)initWithDBName:(NSString *)dbName;
  9. // 删除数据库
  10. - (void)deleteDatabse;
  11. // 数据库存储路径
  12. //- (NSString *)getPath:(NSString *)dbName;
  13. // 打开数据库
  14. - (void)readyDatabse;
  15. // 判断是否存在表
  16. - (BOOL) isTableOK:(NSString *)tableName;
  17. // 获得表的数据条数
  18. - (BOOL) getTableItemCount:(NSString *)tableName;
  19. // 创建表
  20. - (BOOL) createTable:(NSString *)tableName withArguments:(NSString *)arguments;
  21. // 删除表-彻底删除表
  22. - (BOOL) deleteTable:(NSString *)tableName;
  23. // 清除表-清数据
  24. - (BOOL) eraseTable:(NSString *)tableName;
  25. // 插入数据
  26. - (BOOL)insertTable:(NSString*)sql, ...;
  27. // 修改数据
  28. - (BOOL)updateTable:(NSString*)sql, ...;
  29. // 整型
  30. - (NSInteger)getDb_Integerdata:(NSString *)tableName withFieldName:(NSString *)fieldName;
  31. // 布尔型
  32. - (BOOL)getDb_Booldata:(NSString *)tableName withFieldName:(NSString *)fieldName;
  33. // 字符串型
  34. - (NSString *)getDb_Stringdata:(NSString *)tableName withFieldName:(NSString *)fieldName;
  35. // 二进制数据型
  36. - (NSData *)getDb_Bolbdata:(NSString *)tableName withFieldName:(NSString *)fieldName;
  37. @end

m文件

    1. #import "wiDBRoot.h"
    2. @interface wiDBRoot ()
    3. - (NSString *)getPath:(NSString *)dbName;
    4. @end
    5. @implementation wiDBRoot
    6. @synthesize DB;
    7. @synthesize DBName;
    8. /*
    9. + (id)modelWithDBName:(NSString *)dbName
    10. {
    11. [[[self alloc] initWithDBName:dbName] autorelease];
    12. return self;
    13. }
    14. */
    15. - (id)initWithDBName:(NSString *)dbName
    16. {
    17. self = [super init];
    18. if(nil != self)
    19. {
    20. DBName = [self getPath:dbName];
    21. WILog(@"DBName: %@", DBName);
    22. }
    23. return self;
    24. }
    25. - (void)dealloc {
    26. [DB close];
    27. [DB release];
    28. [DBName release];
    29. [super dealloc];
    30. }
    31. // 数据库存储路径(内部使用)
    32. - (NSString *)getPath:(NSString *)dbName
    33. {
    34. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    35. NSString *documentsDirectory = [paths objectAtIndex:0];
    36. return [documentsDirectory stringByAppendingPathComponent:dbName];
    37. }
    38. // 打开数据库
    39. - (void)readyDatabse
    40. {
    41. //BOOL success;
    42. //NSError *error;
    43. //NSFileManager *fileManager = [NSFileManager defaultManager];
    44. //success = [fileManager fileExistsAtPath:self.DBName];
    45. if ([DB databaseExists])
    46. return;
    47. //DB = [FMDatabase databaseWithPath:DBName];
    48. DB = [[FMDatabase alloc] initWithPath:DBName];
    49. if (![DB open])
    50. {
    51. [DB close];
    52. NSAssert1(0, @"Failed to open database file with message '%@'.", [DB lastErrorMessage]);
    53. }
    54. // kind of experimentalish.
    55. [DB setShouldCacheStatements:YES];
    56. }
    57. #pragma mark 删除数据库
    58. // 删除数据库
    59. - (void)deleteDatabse
    60. {
    61. BOOL success;
    62. NSError *error;
    63. NSFileManager *fileManager = [NSFileManager defaultManager];
    64. // delete the old db.
    65. if ([fileManager fileExistsAtPath:DBName])
    66. {
    67. [DB close];
    68. success = [fileManager removeItemAtPath:DBName error:&error];
    69. if (!success) {
    70. NSAssert1(0, @"Failed to delete old database file with message '%@'.", [error localizedDescription]);
    71. }
    72. }
    73. }
    74. // 判断是否存在表
    75. - (BOOL) isTableOK:(NSString *)tableName
    76. {
    77. FMResultSet *rs = [DB executeQuery:@"SELECT count(*) as 'count' FROM sqlite_master WHERE type ='table' and name = ?", tableName];
    78. while ([rs next])
    79. {
    80. // just print out what we've got in a number of formats.
    81. NSInteger count = [rs intForColumn:@"count"];
    82. WILog(@"isTableOK %d", count);
    83. if (0 == count)
    84. {
    85. return NO;
    86. }
    87. else
    88. {
    89. return YES;
    90. }
    91. }
    92. return NO;
    93. }
    94. // 获得表的数据条数
    95. - (BOOL) getTableItemCount:(NSString *)tableName
    96. {
    97. NSString *sqlstr = [NSString stringWithFormat:@"SELECT count(*) as 'count' FROM %@", tableName];
    98. FMResultSet *rs = [DB executeQuery:sqlstr];
    99. while ([rs next])
    100. {
    101. // just print out what we've got in a number of formats.
    102. NSInteger count = [rs intForColumn:@"count"];
    103. WILog(@"TableItemCount %d", count);
    104. return count;
    105. }
    106. return 0;
    107. }
    108. // 创建表
    109. - (BOOL) createTable:(NSString *)tableName withArguments:(NSString *)arguments
    110. {
    111. NSString *sqlstr = [NSString stringWithFormat:@"CREATE TABLE %@ (%@)", tableName, arguments];
    112. if (![DB executeUpdate:sqlstr])
    113. //if ([DB executeUpdate:@"create table user (name text, pass text)"] == nil)
    114. {
    115. WILog(@"Create db error!");
    116. return NO;
    117. }
    118. return YES;
    119. }
    120. // 删除表
    121. - (BOOL) deleteTable:(NSString *)tableName
    122. {
    123. NSString *sqlstr = [NSString stringWithFormat:@"DROP TABLE %@", tableName];
    124. if (![DB executeUpdate:sqlstr])
    125. {
    126. WILog(@"Delete table error!");
    127. return NO;
    128. }
    129. return YES;
    130. }
    131. // 清除表
    132. - (BOOL) eraseTable:(NSString *)tableName
    133. {
    134. NSString *sqlstr = [NSString stringWithFormat:@"DELETE FROM %@", tableName];
    135. if (![DB executeUpdate:sqlstr])
    136. {
    137. WILog(@"Erase table error!");
    138. return NO;
    139. }
    140. return YES;
    141. }
    142. // 插入数据
    143. - (BOOL)insertTable:(NSString*)sql, ...
    144. {
    145. va_list args;
    146. va_start(args, sql);
    147. BOOL result = [DB executeUpdate:sql error:nil withArgumentsInArray:nil orVAList:args];
    148. va_end(args);
    149. return result;
    150. }
    151. // 修改数据
    152. - (BOOL)updateTable:(NSString*)sql, ...
    153. {
    154. va_list args;
    155. va_start(args, sql);
    156. BOOL result = [DB executeUpdate:sql error:nil withArgumentsInArray:nil orVAList:args];
    157. va_end(args);
    158. return result;
    159. }
    160. // 暂时无用
    161. #pragma mark 获得单一数据
    162. // 整型
    163. - (NSInteger)getDb_Integerdata:(NSString *)tableName withFieldName:(NSString *)fieldName
    164. {
    165. NSInteger result = NO;
    166. NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@", fieldName, tableName];
    167. FMResultSet *rs = [DB executeQuery:sql];
    168. if ([rs next])
    169. result = [rs intForColumnIndex:0];
    170. [rs close];
    171. return result;
    172. }
    173. // 布尔型
    174. - (BOOL)getDb_Booldata:(NSString *)tableName withFieldName:(NSString *)fieldName
    175. {
    176. BOOL result;
    177. result = [self getDb_Integerdata:tableName withFieldName:fieldName];
    178. return result;
    179. }
    180. // 字符串型
    181. - (NSString *)getDb_Stringdata:(NSString *)tableName withFieldName:(NSString *)fieldName
    182. {
    183. NSString *result = NO;
    184. NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@", fieldName, tableName];
    185. FMResultSet *rs = [DB executeQuery:sql];
    186. if ([rs next])
    187. result = [rs stringForColumnIndex:0];
    188. [rs close];
    189. return result;
    190. }
    191. // 二进制数据型
    192. - (NSData *)getDb_Bolbdata:(NSString *)tableName withFieldName:(NSString *)fieldName
    193. {
    194. NSData *result = NO;
    195. NSString *sql = [NSString stringWithFormat:@"SELECT %@ FROM %@", fieldName, tableName];
    196. FMResultSet *rs = [DB executeQuery:sql];
    197. if ([rs next])
    198. result = [rs dataForColumnIndex:0];
    199. [rs close];
    200. return result;
    201. }
    202. @end

FMDB的一些基本操作小结的更多相关文章

  1. shell 基本操作小结

    1.echo和if else fi命令 #!/bin/bash echo hello;echo there filename=demo.sh if [ -e "$filename" ...

  2. fmdb 数据库的基本操作

    /** *  创建表 */ - (void)createTable { //1.初始化数据库对象 并且 2.打开数据库 BOOL isOpenSuccess = [self.database open ...

  3. [转载] Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  4. Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  5. java 对类型的基本操作小结

    1.json 字符串转换成对象 SyncCarriageStatusDTO dto= JSON.parseObject(value,SyncCarriageStatusDTO.class); List ...

  6. 转:Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

    转自:http://blog.csdn.net/business122/article/details/7536991 创建列表 sample_list = ['a',1,('a','b')] Pyt ...

  7. 一行代码实现FMDB的CURD操作

    上次实现FMDB的CURD基本操作后,用在项目里,每个实体类都要写SQL语句来实现创建表和CURD操作,总觉得太麻烦,然后就想着利用反射和kvc来实现一个数据库操作的基类继承一下,子类只需要继承,然后 ...

  8. Verdi 看波形常用快捷操作

    Verdi看波形的基本操作小结: 快捷键:(大写字母=Shift+小写) g    get, signlas添加信号,显示波形n    next, Search Forward选定信号按指定的值(上升 ...

  9. python就业班-淘宝-目录.txt

    卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python就业班-淘宝-目录.txt│ ├─01 网络编程│ ├─01-基本概念│ │ 01-网络通信概述 ...

随机推荐

  1. robot framework -记录错误

    1.注意ie浏览器代理设置,报奇怪的错误 2.注意浏览器的安全设置,保护模式全部不要勾选

  2. MonkeyRunner 实现自动点击截屏后与本地图库进行对比输出

    先说下本人是菜鸟,通过网上资料学习,终于调通了MonkeyRunner 实现自动点击截屏后与本地图库进行对比输出,以后做静态UI测试就不需要眼睛盯着看图了,这一切交给MonkeyRunner了. 首先 ...

  3. thinkPHP16---伪静态

    url伪静态通常是为了 满足更好的SEO效果,thinkPHP支持伪静态url设置,可以通过设置URL_HTML_SUFFIX的参数 随意在URL的最后添加你想要的静态后缀,而不会影响当前操作的正常执 ...

  4. Mybatis学习(5)高级映射

    需求: 一.一对一查询 查询订单信息,关联查询创建订单的用户信息: orders--->user:一个订单只由一个用户创建,一对一 orders表 和 user表: 1)使用resultType ...

  5. LISTVIEW嵌套GRIDVIEW的一些处理(点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置)(对这篇文章的优化处理,不每次都new onItemClickListener)

    前几天写了点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置,当时的处理是在ListView的适配器里的GetView方法里每次都new GridView的onItemClickList ...

  6. java-两个jre目录和三个lib目录-转

    lib目录下放置着jar包.程序中的import语句找的就是这些文件!例如:import javax.servlet.RequestDispatcher; 问题在于,在cmd模式下编译,系统会提示:C ...

  7. 条形图(diagrams)

    条形图(diagrams) 题目描述 小 虎刚上了幼儿园,老师让他做一个家庭作业:首先画3行格子,第一行有3个格子,第二行有2个格子,第三行有3个格子.每行的格子从左到右可以放棋子,但要 求除第一行外 ...

  8. drawRect & layoutSubviews 调用时间

    首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘.   layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSub ...

  9. Java 六种异常处理的陋习(转)

    Java 六种异常处理的陋习 原文链接:  http://www.cnblogs.com/Android-and-android/archive/2013/05/02/3054469.html 你觉得 ...

  10. HDU 1887 Weird Numbers(负数的进制转化)

    题目要求有两种情况,第一种from情况,正常输出即可,很简单.第二种是to情况,给一个数字,输出负进制R的原码,这个有点小麻烦...解决方法如下; 首先,把这个数n按正常方式展开,形式如下: .... ...