7. --SQLite 专属的整体查找
比较麻烦。
//查询 又体现了多态:父类指针可以指向子类对象。在我们增加的时候,是一个可变数组,所以内部定义一个可变的数组,但是返回的却是不可变数组。 -(NSArray *)selectAllStudents {
NSMutableArray *mutableArray = nil;
//伴随指针 sqlite3_stmt *stmt = nil;
//查询语句 NSString *selectSQL = [NSString stringWithFormat:@"SELECT * FROM 'student'"];
//准备执行 //db 当前数据库 //selectSQL.UTF8String 执行语句 //-1 最大值 int result = sqlite3_prepare(db,selectSQL.UTF8String,-1,&stmt,NULL);
if (SQLITE_OK == result) { //当上面的准备查询成功后才开始为数组分配内存---保证内存的有效性 mutableArray = [[NSMutableArray alloc]initWithCapacity:15];
//伴随指针是否指向当前行 while (SQLITE_ROW == sqlite3_step(stmt)) { Student *student = [Student new];
//number 是NSInteger类型,后面返回的是int类型 //OC中的NSInteger只是int的别名,只不过OC中的NSInteger是根据机子是X32还是X64来分配的。 //也就是说NSInteger的存储大小事不确定的,得看是x32还是x64。 //typedef long NSInteger; student.number = sqlite3_column_int(stmt, 0);
//根据字段查询的字符串需要强转为 const char * 类型后,再转化成OC字符串 student.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt,1)];
student.age = sqlite3_column_int(stmt, 2);
student.gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt,3)];
[mutableArray addObject:student]; } for (Student *stu in mutableArray) { NSLog(@"学生:%@",stu); }
} else { NSLog(@" 查询失败"); }
//释放指针 sqlite3_finalize(stmt);
return mutableArray; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |