使用数据库的步骤ios使用的数据库是sqlite3@H_404_1@
UIKit框架并不支持sqlite3,需要导入一个支持sqlite的库@H_404_1@
1.创建一个数据库文件,如果已经有了只需要打开数据库文件@H_404_1@
2.创建一张表@H_404_1@
3.对表的数据进行增删改查@H_404_1@
#import "ViewController.h"@H_404_1@
@interface ViewController (){@H_404_1@
}@H_404_1@
@implementation ViewController@H_404_1@
- (void)viewDidLoad {@H_404_1@
[super viewDidLoad];@H_404_1@
[self createDB];@H_404_1@
//2.创建表@H_404_1@
[self createTable];@H_404_1@
@H_404_1@
//3.插入数据@H_404_1@
[self insertData];@H_404_1@
[self deleteData];@H_404_1@
@H_404_1@
//5.更新数据@H_404_1@
[self updateData];@H_404_1@
@H_404_1@
//6.查找数据@H_404_1@
[self selectData];@H_404_1@
}@H_404_1@
#pragma mark - 创建/打开数据库@H_404_1@
- (void) createDB{@H_404_1@
//1.创建数据库的路径(实际开发过程中是沙盒目录下的一个路径);@H_404_1@
const char * path = "/Users/fanjuan/Desktop/my files/网络/day6-数据库/数据库文件/user.sqlite";@H_404_1@
@H_404_1@
//2.打开一个数据库文件(如果数据库不存在就创建一个新的);@H_404_1@
//参数2:指向数据库的指针的地址,代表当前打开或者创建的数据库@H_404_1@
//返回值:打开或者创建是否成功@H_404_1@
int ret = sqlite3_open(path,&_db);@H_404_1@
//sqlITE_OK专门用来判断数据库操作成功的宏@H_404_1@
if (ret == sqlITE_OK) {@H_404_1@
@H_404_1@
NSLog(@"数据库打开/创建成功");@H_404_1@
@H_404_1@
}else{@H_404_1@
@H_404_1@
NSLog(@"数据库打开/创建失败");@H_404_1@
@H_404_1@
}@H_404_1@
}@H_404_1@
#pragma mark - 创建表@H_404_1@
- (void)createTable{@H_404_1@
@H_404_1@
const char *sql = "CREATE TABLE IF NOT EXISTS t_user(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL DEFAULT 22,score real DEFAULT 0); ";@H_404_1@
//sqlite3_exec 专门用来执行DDL,DML语句的方法@H_404_1@
//参数1:数据库(必须是已经打开的数据库);@H_404_1@
int ret = sqlite3_exec(_db,sql,NULL,NULL);@H_404_1@
//3.判断表是否创建成功@H_404_1@
if (ret == sqlITE_OK)
{@H_404_1@
NSLog(@"创建成功");@H_404_1@
}else{@H_404_1@
NSLog(@"创建表失败");@H_404_1@
}@H_404_1@
}@H_404_1@
#pragma mark - 插入数据@H_404_1@
- (void) insertData{@H_404_1@
const char *sql = "INSERT INTO t_user (name,age,score) VALUES ('fanjuan',22,99);";@H_404_1@
@H_404_1@
//一次插入多条数据@H_404_1@
NSMutableString *mstr = [NSMutableString string];@H_404_1@
@H_404_1@
for (int i=0; i<20; i++) {@H_404_1@
NSString *str = [NSString stringWithFormat:@"INSERT INTO t_user (name,score) VALUES ('fanjuan%d',%d,%f);",i,arc4random() % 10 + 10,(float)(arc4random()%101)];@H_404_1@
@H_404_1@
[mstr appendString:str];@H_404_1@
}@H_404_1@
@H_404_1@
const char *sql2 = [mstr UTF8String];@H_404_1@
int ret = sqlite3_exec(_db,sql2,NULL);@H_404_1@
@H_404_1@
//3.判断是否成功@H_404_1@
if (ret == sqlITE_OK) {@H_404_1@
NSLog(@"插入数据成功");@H_404_1@
}else{@H_404_1@
NSLog(@"插入数据失败");@H_404_1@
}@H_404_1@
}@H_404_1@
- (void) deleteData{@H_404_1@
@H_404_1@
const char *sql = "DELETE FROM t_user WHERE name ='fanjuan';";@H_404_1@
int ret = sqlite3_exec(_db,NULL);@H_404_1@
@H_404_1@
//3.判断是否成功@H_404_1@
if (ret == sqlITE_OK) {@H_404_1@
}else{@H_404_1@
}@H_404_1@
@H_404_1@
}@H_404_1@
#pragma mark - 更新数据@H_404_1@
- (void)updateData{@H_404_1@
@H_404_1@
const char *sql = "UPDATE t_user SET score = 99 WHERE score < 80;";@H_404_1@
@H_404_1@
int ret = sqlite3_exec(_db,NULL);@H_404_1@
@H_404_1@
//3.判断是否成功@H_404_1@
if (ret == sqlITE_OK) {@H_404_1@
NSLog(@"更新数据成功");@H_404_1@
}else{@H_404_1@
NSLog(@"更新数据失败");@H_404_1@
}@H_404_1@
@H_404_1@
}@H_404_1@
- (void)selectData{@H_404_1@
@H_404_1@
const char *sql = "SELECT * FROM t_user;";@H_404_1@
@H_404_1@
//2.执行语句@H_404_1@
//参数3:sql语句的长度(传入-1自动计算)@H_404_1@
//参数4:结果集(专门用来存放结果的容器)@H_404_1@
//参数5:null@H_404_1@
// 创建存放结果集指针@H_404_1@
int ret= sqlite3_prepare_v2(_db@H_404_1@
,-1,&stmt,NULL);@H_404_1@
if (ret == sqlITE_OK) {@H_404_1@
@H_404_1@
@H_404_1@
//将数据从结果 集中拿出来@H_404_1@
//遍历结果集中的数据@H_404_1@
while (sqlite3_step(stmt) == sqlITE_ROW) {@H_404_1@
@H_404_1@
//参数1:结果集指针@H_404_1@
//参数2:列标号(从0开始)@H_404_1@
const unsigned char *name = sqlite3_column_text(stmt,1);@H_404_1@
@H_404_1@
int age = sqlite3_column_int(stmt,2);@H_404_1@
@H_404_1@
double score = sqlite3_column_double(stmt,3);@H_404_1@
NSLog(@"%s-%d-%.2lf",name,score);@H_404_1@
@H_404_1@
}@H_404_1@
@H_404_1@
@H_404_1@
}else{@H_404_1@
}@H_404_1@
@H_404_1@
}@H_404_1@
@end@H_404_1@