数据持久化三之SQlite3
使用数据库的步骤ios使用的数据库是sqlite3 UIKit框架并不支持sqlite3,需要导入一个支持sqlite的库 1.创建一个数据库文件,如果已经有了只需要打开数据库文件 2.创建一张表 3.对表的数据进行增删改查 #import "ViewController.h" #import <sqlite3.h> @interface ViewController (){ //声明一个数据库变量 sqlite3 *_db; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //1.创建数据库 [self createDB]; //2.创建表 [self createTable];
//3.插入数据 [self insertData]; //4.删除数据 [self deleteData];
//5.更新数据 [self updateData];
//6.查找数据 [self selectData]; } #pragma mark - 创建/打开数据库 - (void) createDB{ //1.创建数据库的路径(实际开发过程中是沙盒目录下的一个路径); const char * path = "/Users/fanjuan/Desktop/my files/网络/day6-数据库/数据库文件/user.sqlite";
//2.打开一个数据库文件(如果数据库不存在就创建一个新的); //参数1:数据库文件的路径 //参数2:指向数据库的指针的地址,代表当前打开或者创建的数据库 //返回值:打开或者创建是否成功 int ret = sqlite3_open(path,&_db); //3.判断数据库打开创建是否成功 //SQLITE_OK专门用来判断数据库操作成功的宏 if (ret == SQLITE_OK) {
NSLog(@"数据库打开/创建成功");
}else{
NSLog(@"数据库打开/创建失败");
} } #pragma mark - 创建表 - (void)createTable{
//1.创建一个创建表的sql语句 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); "; //sqlite3_exec 专门用来执行DDL,DML语句的方法 //DQL语句不可以使用这个函数; //参数1:数据库(必须是已经打开的数据库); //参数2:需要执行的sql语句 //参数5:错误信息 //返回值:是否成功执行sql语句 //2.执行创建表的sql语句; int ret = sqlite3_exec(_db,sql,NULL,NULL); //3.判断表是否创建成功 if (ret == SQLITE_OK) NSLog(@"创建成功"); }else{ NSLog(@"创建表失败"); } } #pragma mark - 插入数据 - (void) insertData{ //1.创建插入数据的sql语句 const char *sql = "INSERT INTO t_user (name,age,score) VALUES ('fanjuan',22,99);";
//一次插入多条数据 NSMutableString *mstr = [NSMutableString string];
for (int i=0; i<20; i++) { NSString *str = [NSString stringWithFormat:@"INSERT INTO t_user (name,score) VALUES ('fanjuan%d',%d,%f);",i,arc4random() % 10 + 10,(float)(arc4random()%101)];
[mstr appendString:str]; }
const char *sql2 = [mstr UTF8String]; //2.执行插入数据的sql语句 int ret = sqlite3_exec(_db,sql2,NULL);
//3.判断是否成功 if (ret == SQLITE_OK) { NSLog(@"插入数据成功"); }else{ NSLog(@"插入数据失败"); } } #pragma mark - 删除数据 - (void) deleteData{
//1.创建sql语句 const char *sql = "DELETE FROM t_user WHERE name ='fanjuan';"; //2.执行sql语句 int ret = sqlite3_exec(_db,NULL);
//3.判断是否成功 if (ret == SQLITE_OK) { NSLog(@"删除数据成功"); }else{ NSLog(@"删除数据失败"); }
} #pragma mark - 更新数据 - (void)updateData{
//1.创建sql语句 const char *sql = "UPDATE t_user SET score = 99 WHERE score < 80;";
//2.执行sql语句 int ret = sqlite3_exec(_db,NULL);
//3.判断是否成功 if (ret == SQLITE_OK) { NSLog(@"更新数据成功"); }else{ NSLog(@"更新数据失败"); }
} #pragma mark 查询数据 - (void)selectData{
//1.创建sql语句 const char *sql = "SELECT * FROM t_user;";
//2.执行语句 //参数1:数据库 //参数2:数据查询的sql语句 //参数3:sql语句的长度(传入-1自动计算) //参数4:结果集(专门用来存放结果的容器) //参数5:null // 创建存放结果集指针 sqlite3_stmt *stmt; int ret= sqlite3_prepare_v2(_db ,-1,&stmt,NULL); //3.判断查询是否成功; if (ret == SQLITE_OK) {
NSLog(@"查询成功");
//将数据从结果 集中拿出来 //遍历结果集中的数据 while (sqlite3_step(stmt) == SQLITE_ROW) {
//拿到查询结果的数据 //参数1:结果集指针 //参数2:列标号(从0开始) const unsigned char *name = sqlite3_column_text(stmt,1);
int age = sqlite3_column_int(stmt,2);
double score = sqlite3_column_double(stmt,3); NSLog(@"%s-%d-%.2lf",name,score);
}
}else{ NSLog(@"查询失败"); }
} @end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |