数据持久化三之SQlite3

前端之家收集整理的这篇文章主要介绍了数据持久化三之SQlite3前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用数据库的步骤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@

#import <sqlite3.h>@H_404_1@

@interface ViewController (){@H_404_1@

//声明一个数据库变量@H_404_1@

sqlite3 *_db;@H_404_1@

}@H_404_1@

@end@H_404_1@

@implementation ViewController@H_404_1@

- (void)viewDidLoad {@H_404_1@

[super viewDidLoad];@H_404_1@

//1.创建数据库@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@

//4.删除数据@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@

//参数1:数据库文件的路径@H_404_1@

//参数2:指向数据库的指针的地址,代表当前打开或者创建的数据库@H_404_1@

//返回值:打开或者创建是否成功@H_404_1@

int ret = sqlite3_open(path,&_db);@H_404_1@

//3.判断数据库打开创建是否成功@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@

//1.创建一个创建表的sql语句@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@

//DQL语句不可以使用这个函数;@H_404_1@

//参数1:数据库(必须是已经打开的数据库);@H_404_1@

//参数2:需要执行的sql语句@H_404_1@

//参数5:错误信息@H_404_1@

//返回值:是否成功执行sql语句@H_404_1@

//2.执行创建表的sql语句;@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@

//1.创建插入数据的sql语句@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@

//2.执行插入数据的sql语句@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@

#pragma mark - 删除数据@H_404_1@

- (void) deleteData{@H_404_1@

@H_404_1@

//1.创建sql语句@H_404_1@

const char *sql = "DELETE FROM t_user WHERE name ='fanjuan';";@H_404_1@

//2.执行sql语句@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@

#pragma mark - 更新数据@H_404_1@

- (void)updateData{@H_404_1@

@H_404_1@

//1.创建sql语句@H_404_1@

const char *sql = "UPDATE t_user SET score = 99 WHERE score < 80;";@H_404_1@

@H_404_1@

//2.执行sql语句@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@

#pragma mark 查询数据@H_404_1@

- (void)selectData{@H_404_1@

@H_404_1@

//1.创建sql语句@H_404_1@

const char *sql = "SELECT * FROM t_user;";@H_404_1@

@H_404_1@

//2.执行语句@H_404_1@

//参数1:数据库@H_404_1@

//参数2:数据查询sql语句@H_404_1@

//参数3:sql语句的长度(传入-1自动计算)@H_404_1@

//参数4:结果集(专门用来存放结果的容器)@H_404_1@

//参数5:null@H_404_1@

// 创建存放结果集指针@H_404_1@

sqlite3_stmt *stmt;@H_404_1@

int ret= sqlite3_prepare_v2(_db@H_404_1@

,-1,&stmt,NULL);@H_404_1@

//3.判断查询是否成功;@H_404_1@

if (ret == sqlITE_OK) {@H_404_1@

@H_404_1@

NSLog(@"查询成功");@H_404_1@

@H_404_1@

//将数据从结果 集中拿出来@H_404_1@

//遍历结果集中的数据@H_404_1@

while (sqlite3_step(stmt) == sqlITE_ROW) {@H_404_1@

@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@

NSLog(@"查询失败");@H_404_1@

}@H_404_1@

@H_404_1@

}@H_404_1@

@end@H_404_1@

猜你在找的Sqlite相关文章