SQLite嵌入式数据库
1.支持时间,不需要配置,不需要安装,不需要管理员;
2.支持大部分SQL92;
3.完整的数据库保存在磁盘上面的一个文件,同一个数据库文件可以在不同机器上面使用.最大支持数据库到2T;
4.占用内存少;
// 如果你使用数据库的话 要引入一个框架
// libsqlite3.0.dylib框架
1 创建一个studentmodel类 2 #import <Foundation/Foundation.h> 3 4 @interface LanOuStudent : NSObject 5 6 // 名字 7 @property (nonatomic, retain) NSString *name; 8 // 性别 9 @property (nonatomic, retain) NSString *gender; 10 // 年龄 11 @property (nonatomic, assign) NSInteger age; 12 // 学号 13 @property (nonatomic, assign) NSInteger number; 14 15 @end 16 17 创建一个SQliteMananger类 18 .h文件 19 // 使用的话需要引入头文件#import <sqlite3.h> 20 #import <Foundation/Foundation.h> 21 #import <sqlite3.h> 22 #import "LanOuStudent.h" 23 24 @interface SQliteMananger : NSObject 25 26 // 初始化方法 27 + (SQliteMananger *)shareManager; 28 29 // 如果你使用数据库的话 要引入一个框架 30 // libsqlite3.0.dylib框架 31 // 使用的话 需要引入头文件#import <sqlite3.h> 32 33 // 打开数据库 34 // sqlite3 * 表示咱们的数据库 35 - (sqlite3 *)openDB; 36 37 // 关闭数据库 38 - (void)closeDB; 39 40 // 创建一个表 41 - (void)createTable; 42 43 // 插入数据 44 - (void)insertWith:(LanOuStudent *)student; 45 // 删除成功 删除20岁以上的 46 - (void)deleteStudentWithAge:(NSInteger)age; 47 // 更新数据 根据名字修改年龄 48 - (void)updateName:(NSString *)name setAge:(NSInteger)age; 49 50 // 查询数据 根据名字和年龄查询学生 51 - (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age; 52 // 查询所有学生的信息 53 - (NSArray *)queryAllStudents; 54 55 @end 56 .m文件 57 #import "SQliteMananger.h" 58 59 @implementation SQliteMananger 60 61 // 创建单例类 进行数据库 操作方法的封装 62 63 // 初始化方法 64 + (SQliteMananger *)shareManager 65 { 66 static SQliteMananger *manager = nil; 67 if (manager == nil) { 68 manager = [[SQliteMananger alloc] init]; 69 } 70 return manager; 71 } 72 73 // 定义一个静态指针 负责连接数据库 74 // 保证数据库 直到程序结束才被释放 75 static sqlite3 *db = nil; 76 77 // 打开数据库 78 // sqlite3 * 表示咱们的数据库 79 - (sqlite3 *)openDB 80 { 81 // 判断 82 // 如果不为空就说明数据库存在直接返回就行 83 if (db != nil) { 84 return db; 85 } 86 // 不存在就创建一个数据库 87 // 获取文件路径 88 NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 89 // 拼接路径 90 // 数据库名称 Student.sqlite 91 NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"Student.sqlite"]; 92 NSLog(@"%@", dbPath); 93 94 // 创建数据库 95 // 参数1 文件路径 需要把oc的字符串转换一下类型 dbPath.UTF8String 96 // 参数2 数据库地址 97 // sqlite3_open 该函数 如果有数据库就打开 没有就创建一个出来 98 int result = sqlite3_open(dbPath.UTF8String, &db); 99 100 // 查看命令返回结果 101 if (result == SQLITE_OK) { 102 NSLog(@"创建成功 或者打开成功"); 103 } else { 104 NSLog(@"创建失败 或者打开失败"); 105 } 106 return db; 107 } 108 109 // 关闭数据库 110 - (void)closeDB 111 { 112 // 关闭数据库 113 int result = sqlite3_close(db); 114 if (result == SQLITE_OK) { 115 NSLog(@"关闭成功"); 116 // 如果成功的话 把数据库置为空 117 db = nil; 118 } else { 119 NSLog(@"关闭数据库失败"); 120 } 121 } 122 123 // 创建一个表 124 - (void)createTable 125 { 126 // 1.打开数据库 127 db = [self openDB]; 128 // 2.写创建表的sql语句 129 NSString *sql = @"create table IF NOT EXISTS lanOuStudent(number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL)"; 130 // 3.执行sql语句 131 // char **errmsg 错误信息 132 char *error = nil; 133 int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, &error); 134 // 4.判断是否成功 135 if (result == SQLITE_OK) { 136 NSLog(@"创建表成功"); 137 } else { 138 NSLog(@"@创建表失败"); 139 } 140 // 5.关闭数据库 141 [self closeDB]; 142 } 143 144 // 插入数据 145 // 插入的不是model 而是 model信息 146 - (void)insertWith:(LanOuStudent *)student 147 { 148 // 打开数据库 149 db = [self openDB]; 150 // 写sql语句 151 NSString *sql = [NSString stringWithFormat:@"insert into lanOuStudent(name, gender, age, number) values(‘%@‘, ‘%@‘, ‘%ld‘, ‘%ld‘)", student.name, student.gender, student.age, student.number]; 152 // 3.执行语句 153 int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL); 154 // 4.判断返回值结果 判断是否执行成功 155 if (result == SQLITE_OK) { 156 NSLog(@"插入成功"); 157 } else { 158 NSLog(@"插入失败"); 159 } 160 // 5 关闭数据库 161 [self closeDB]; 162 } 163 164 // 删除成功 删除20岁以上的 165 - (void)deleteStudentWithAge:(NSInteger)age 166 { 167 // 1.打开数据库 168 [self openDB]; 169 // 2.写sql语句 170 NSString *sql = [NSString stringWithFormat:@"delete from lanOuStudent where age > ‘%ld‘", age]; 171 // 3.执行语句 172 int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL); 173 // 4.判断是否成功 174 if (result == SQLITE_OK) { 175 NSLog(@"删除成功"); 176 } else { 177 NSLog(@"删除失败"); 178 } 179 // 关闭数据库 180 [self closeDB]; 181 } 182 // 更新数据 根据名字修改年龄 183 - (void)updateName:(NSString *)name setAge:(NSInteger)age 184 { 185 // 1.打开数据库 186 [self openDB]; 187 // 2.写sql语句 188 NSString *sql = [NSString stringWithFormat:@"update lanOuStudent set age = ‘%ld‘ where name = ‘%@‘", age, name]; 189 // 3.执行sql语句 190 int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL); 191 // 4.判断是否成功 192 if (result == SQLITE_OK) { 193 NSLog(@"更新成功"); 194 } else { 195 NSLog(@"失败"); 196 } 197 // 5.关闭数据库 198 [self closeDB]; 199 } 200 201 // 查询数据 根据名字和年龄查询学生 202 - (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age 203 { 204 // 1.打开数据库 205 db = [self openDB]; 206 // 2.写sql语句 207 NSString *sql = [NSString stringWithFormat:@"select *from lanOuStudent where name = ‘%@‘ and age = ‘%ld‘",name , age]; 208 // 3.创建跟随指针 保存sql语句 209 sqlite3_stmt *stmt = nil; 210 // 4.执行查询语句 211 // int nByte 表示sql语句的长度 -1 代表无限长 212 // const char **pzTail 截取未执行的部分的语句 213 int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL); 214 // 5.判断执行语句是否成功 215 if (result == SQLITE_OK) { 216 NSLog(@"查询语句执行成功"); 217 // 6.绑定查询条件信息 218 // 查询的条件是什么类型的 就算bind_啥类型 219 // 参数2 int 查询条件的顺序 从1开始 220 // 参数3 const char * 填查询条件的 字段名 221 // 参数4 int n 长度 -1 222 // 参数5 void (*)(void *) 绑定后执行的函数 223 224 // 绑定的条件1 225 sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL); 226 // 绑定条件2 227 sqlite3_bind_int(stmt, 2, -1); 228 229 // 7.开始查询 230 // sqlite3_step(stmt) == SQLITE_ROW 231 // 如果这条语句可以被找到 就返回SQLITE_ROW 232 while (sqlite3_step(stmt) == SQLITE_ROW) { 233 // 8.获取数据 234 // 参数2 int iCol 在数据库表中列数 从0开始 需要打开数据库看一下在第几列 235 char *name = (char *)sqlite3_column_text(stmt, 1); 236 char *gender = (char *)sqlite3_column_text(stmt, 2); 237 int age = sqlite3_column_int(stmt, 3); 238 int number = sqlite3_column_int(stmt, 0); 239 240 // 9.给对象进行赋值 241 LanOuStudent *student = [[LanOuStudent alloc] init]; 242 // 把c语言字符串 转回OC字符串 243 student.name = [NSString stringWithUTF8String:name]; 244 student.gender = [NSString stringWithUTF8String:gender]; 245 student.age = age; 246 student.number = number; 247 248 // 10.释放跟随指针 249 sqlite3_finalize(stmt); 250 251 // 关闭数据库 252 [self closeDB]; 253 254 // 11 返回数据 并释放对象 255 return [student autorelease]; 256 } 257 } else { 258 NSLog(@"查询语句执行失败"); 259 } 260 // 12.关闭数据库 261 [self closeDB]; 262 return nil; 263 } 264 265 // 查询所有学生的信息 266 - (NSArray *)queryAllStudents 267 { 268 // 1.打开数据库 269 db = [self openDB]; 270 // 2.写sql语句 271 NSString *sql = [NSString stringWithFormat:@"select *from lanOuStudent"]; 272 // 3.创建一个跟随指针 273 sqlite3_stmt *stmt = nil; 274 // 4.执行查询语句 275 int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL); 276 // 5.判断是否成功 277 if (result == SQLITE_OK) { 278 NSLog(@"执行语句成功"); 279 // 6.不用绑定查询 并创建一个数组 保存查询好的model 280 NSMutableArray *array = [NSMutableArray array]; 281 // 7.开始查询 282 while (sqlite3_step(stmt) == SQLITE_ROW) { 283 // 8.读取数据 284 char *name = (char *)sqlite3_column_text(stmt, 1); 285 char *gender = (char *)sqlite3_column_text(stmt, 2); 286 int age = sqlite3_column_int(stmt, 3); 287 int number = sqlite3_column_int(stmt, 0); 288 // 9.创建model并赋值 289 LanOuStudent *student = [[LanOuStudent alloc] init]; 290 student.name = [NSString stringWithUTF8String:name]; 291 student.gender = [NSString stringWithUTF8String:gender]; 292 student.age = age; 293 student.number = number; 294 295 // 10.把model装进数组中 296 [array addObject:student]; 297 // 11.释放学生对象 298 [student release]; 299 } 300 // 12.释放跟随指针 301 sqlite3_finalize(stmt); 302 // 13.关闭数据库 303 [self closeDB]; 304 // 14. 返回数组 305 return array; 306 } else { 307 NSLog(@"执行失败"); 308 } 309 // 15.关闭数据库 310 [self closeDB]; 311 return nil; 312 } 313 314 @end 315 在appdelegate.m中调用引入头文件 316 #import "SQliteMananger.h" 317 // 创建一个操作数据库manager对象 318 SQliteMananger *manager = [SQliteMananger shareManager]; 319 // 打开数据库 320 [manager openDB]; 321 // 关闭数据库 322 [manager closeDB]; 323 324 // 创建一个表 325 [manager createTable]; 326 327 // 插入数据 328 LanOuStudent *student1 = [[LanOuStudent alloc] init]; 329 student1.name = @"小芳"; 330 student1.age = 18; 331 student1.gender = @"女"; 332 student1.number = 120908042; 333 [manager insertWith:student1]; 334 335 LanOuStudent *student2 = [[LanOuStudent alloc] init]; 336 student1.name = @"励志"; 337 student1.age = 20; 338 student1.gender = @"男"; 339 student1.number = 1; 340 [manager insertWith:student1]; 341 342 LanOuStudent *student3 = [[LanOuStudent alloc] init]; 343 student1.name = @"体力"; 344 student1.age = 23; 345 student1.gender = @"男"; 346 student1.number = 2; 347 [manager insertWith:student1]; 348 349 [manager deleteStudentWithAge:20]; 350 351 [manager updateName:@"小芳" setAge:23]; 352 353 LanOuStudent *student = [manager queryStudentWithName:@"小芳" andAge:18]; 354 NSArray *array = [manager queryAllStudents]; 355 NSLog(@"%@", array);
时间: 2024-10-11 14:22:31