IOS学习笔记2015-04-090C-SQLite数据存储

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1 项目导入 libsqlite3.0.dylib 框架

2 在使用数据sqlite的头文件(.h)上导入 #Impourt <sqlite3.h>

3 推荐自己本地电脑下个sqlite Manager 管理软件类似的

下面上代码

////ViewController.m//SQLiteDemo////Created by wangtouwang on 15/4/9.//Copyright (c) 2015年 wangtouwang. All rights reserved.//#import"ViewController.h"#import"WPUser.h"#defineDBNAME @ "MySQLite.sqlite"@interfaceViewController ()

{

sqlite3*db;

}@end@implementationViewController- (void)viewDidLoad {

[super viewDidLoad];

[self createSqlDBOrOpenDB];

[self createTable];//for (int index=0; index<30; index++) {//[self insertIntoData];//}[self updateData:[self searchAllData]];

}#PRagmamark 更新数据

-(void)updateData:(NSMutableArray *)array{

NSString*sql =@"update user set name=?,age=? where id=?";

sqlite3_stmt*stmt;for(intindex=0; index<array.count; index++) {

WPUser*user = (WPUser *)array[index];

user.name=@"张建华";

user.age=31;if(sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL)==SQLITE_OK) {

sqlite3_bind_text(stmt,1, [user.name UTF8String], -1, NULL);

sqlite3_bind_int(stmt,2, user.age);

sqlite3_bind_int(stmt,3, user.ID);if(sqlite3_step(stmt)==SQLITE_DONE) {

NSLog(@"更新成功");

}

}

}

}#pragmamark 读取数据

-(NSMutableArray *)searchAllData{

NSMutableArray*array =[NSMutableArray array];

NSString*sql =@"select id,name,age from user";

sqlite3_stmt*stmt;if(sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL)==SQLITE_OK) {while(sqlite3_step(stmt)==SQLITE_ROW) {

NSInteger ID= sqlite3_column_int(stmt,0);char*name = (char*)sqlite3_column_text(stmt,1);

NSString*uname =[[NSString alloc] initWithUTF8String:name];

NSInteger age= sqlite3_column_int(stmt,2);

NSLog(@"ID=%lu NAME=%s AGE=%lu",ID,name,age);

WPUser*user =[WPUser initUserName:uname Age:age];

user.ID=ID;

[array addObject:user];

}

}

sqlite3_close(db);returnarray;

}#pragmamark 新增数据

-(void)insertIntoData{

NSString*sql =@"insert into user(name,age) values(?,?)";

WPUser*user = [WPUser initUserName:@"JACK"Age:11];

sqlite3_stmt*stmt;//插入数据前检测语法是否正确if((sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL))==SQLITE_OK ) {//绑定参数 参数2:为序号(从1开始),参数3:为字符串值,参数4 为字符串长度。sqlite3_bind_text的第五个参数为一个函数指针sqlite3_bind_text(stmt,1, [user.name UTF8String], -1, NULL);

sqlite3_bind_int(stmt,2,user.age);//真正执行插入 sqlite3_stepif(sqlite3_step(stmt)==SQLITE_DONE) {

NSLog(@"INSERT INTO SUCCESS");

}else{

NSLog(@"INSERT INTO ERROR");

}

}

}#pragmamark 创建表

-(void)createTable{

NSString*sql =@"create table if not exists user (id integer primary key autoincrement,name text,age integer);";char*errormsg;//执行创建语句 sqlite3_exex 是函数 参数一:数据库的句柄(db),参数二: 为sql语句,参数三 回调参数,是一个指向函数的指针,如果把callback前面的*改成^则就是一个block代码段,//参数四 可以写NULL,第五个参数为错误信息//在这里创建需要先判断表是否已存在intresult = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &errormsg);if(result==SQLITE_OK) {

NSLog(@"创建成功");

}else{

NSLog(@"创建失败 愿因是:%s",errormsg);

}

}#pragmamark 创建数据库实例或者打开数据实例

-(void)createSqlDBOrOpenDB{//获取 项目 Doucment文件目录地址NSString *doc =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSLog(@"%@",doc);//创建 SQLITE 文件或者获取该文件路径NSString *DB_PATH =[doc stringByAppendingPathComponent:DBNAME];

NSLog(@"%@",DB_PATH);//打开或者创建DB实例 这里用到C里面的语法和指针intresult = sqlite3_open([DB_PATH UTF8String], &db);//sqlite3_open方法名 参数 const filename DB文件路径,第二个参数就是数据库实例化对象 返回参数 int 类型if(result!=SQLITE_OK){

sqlite3_close(db);//关闭实例化NSLog(@"打开数据哭实例化对象失败");

}else{

NSLog(@"CREATE SUCCESS");

}

}@end

////WPUser.m//SQLiteDemo////Created by wangtouwang on 15/4/9.//Copyright (c) 2015年 wangtouwang. All rights reserved.//#import"WPUser.h"@implementationWPUser-(instancetype)initUserName:(NSString *)name Age:(NSInteger)age{if(self=[super init]) {

self.name=name;

self.age=age;

}returnself;

}+(instancetype)initUserName:(NSString *)name Age:(NSInteger)age{return[[WPUser alloc] initUserName:name Age:age];

}@end

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航