SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
iOS开发中SQLite简单使用:
1.首先要添加库文件libsqlite3.tbd
2.一般使用的时候都是自己封装一个类然后方便使用。
创建类SQLiteManger,在SQLiteManger中导入头文件
#import
然后创建实体类,类似于model方便使用
SQLiteModel
2.1 打开数据库
- (BOOL)openTheDatabase{
//获取数据库文件路径
NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/sqlite.db"];
//初始化sqlite
_sqlite = nil;
//打开数据库文件,如果文件存在,则直接打开,如果不存在则创建新的文件然后打开
int result = sqlite3_open([filePath UTF8String], &_sqlite);
if (result != SQLITE_OK) {
NSLog(@"数据库打开失败!");
return NO;
}
NSLog(@"数据库打开成功!");
return YES;
}
这里我们把打开数据库的代码写在一个方法里,因为跟其他的数据库一样sqlite的每一个数据库都是要先打开数据库才可以操作
2.2 创建表
这里我们创建一个表名叫t_user的表 四个字段 主键为userId(text类型) ,username(text类型) ,age(integer类型) ,sex(text类型
- (BOOL)createTable{
//1.打开数据库
if (![self openTheDatabase]) {
return NO;
}
//2.创建SQL语句
NSString *sqlStr = @"create table t_user(userId text primary key not null,username text,age integer,sex text)";
//3.创建表
char *error = nil;
int result = sqlite3_exec(_sqlite, [sqlStr UTF8String], NULL, NULL, &error);
if (result == SQLITE_OK) {
NSLog(@"表格创建成功");
sqlite3_close(_sqlite);
return YES;
}
NSLog(@"表格创建失败");
sqlite3_close(_sqlite);
return NO;
}
2.3 插入数据
- (BOOL)insertDataWithUserId:(NSString *)userId username:(NSString *)username age:(int)age sex:(NSString *)sex{
//1.打开数据库
if (![self openTheDatabase]) {
return NO;
}
//2.编写sql语句 value值需要绑定 ?代替
NSString *sqlStr = @"insert into t_user(userId,username,age,sex) values(?,?,?,?)";
//3.编译sql语句
//声明stmt
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);
//编译不成功直接返回
if (result != SQLITE_OK) {
NSLog(@"编译失败");
return NO;
}
//4.绑定参数
sqlite3_bind_text(stmt, 1, [userId UTF8String], -1, NULL);
sqlite3_bind_text(stmt, 2, [username UTF8String], -1, NULL);
sqlite3_bind_int(stmt, 3, age);
sqlite3_bind_text(stmt, 4, [sex UTF8String], -1, NULL);
//5.执行sql语句
int step = sqlite3_step(stmt);
NSLog(@"返回的状态码是:%d 101是成功",step);
if (step == SQLITE_ERROR) {
NSLog(@"stmt执行失败!");
//关闭数据库
sqlite3_close(_sqlite);
return NO;
}else if (step == SQLITE_CONSTRAINT){
//关闭数据库
sqlite3_close(_sqlite);
return NO;
}
//关闭编译后的stmt 关闭数据库
sqlite3_finalize(stmt);
sqlite3_close(_sqlite);
NSLog(@"插入成功");
return YES;
}
2.4查询所有数据
- (NSArray *)queryData{
//1.打开数据库
if (![self openTheDatabase]) {
return nil;
}
//2.编写sql语言
NSString *sqlStr = @"select * from t_user ";
//3.编译sql语句
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);
if (result != SQLITE_OK) {
NSLog(@"编译失败!");
return nil;
}
//4.绑定参数
//5.执行sql sqlite3_step分步执行(单次)
int step = sqlite3_step(stmt);
if (step == SQLITE_ERROR) {
NSLog(@"执行错误");
return nil;
}
NSMutableArray *array = [NSMutableArray array];
//判断执行该步后是否还有剩余数据
while (step == SQLITE_ROW) {
SQLiteModel *model = [[SQLiteModel alloc]init];
//获取该该条数据的详细字段信息
//userId
model.userId = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 0) encoding:NSUTF8StringEncoding];
//姓名
model.username = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 1) encoding:NSUTF8StringEncoding];
//年龄
model.age = sqlite3_column_int(stmt, 2);
//性别
model.sex = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 3) encoding:NSUTF8StringEncoding];
[array addObject:model];
step = sqlite3_step(stmt);
}
//6.关闭数据库,关闭编译后的stmt
sqlite3_finalize(stmt);
sqlite3_close(_sqlite);
//返回数据数组
return array;
}
2.5根据userId更新某一条数据
- (BOOL)updateDataWithUserId:(NSString *)userId newName:(NSString *)newName newAge:(int)newAge newSex:(NSString *)newSex{
//1.打开数据库
if (![self openTheDatabase]) {
return NO;
}
//2.编写sql语句 value值需要绑定 ?代替
NSString *sqlStr = @"update t_user set username = ?,age = ?,sex = ? where userId = ? ";
//3.编译sql语句
//声明stmt
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);
//编译不成功直接返回
if (result != SQLITE_OK) {
NSLog(@"编译失败");
return NO;
}
//4.绑定参数
sqlite3_bind_text(stmt, 1, [newName UTF8String], -1, NULL);
sqlite3_bind_int(stmt, 2, newAge);
sqlite3_bind_text(stmt, 3, [newSex UTF8String], -1, NULL);
sqlite3_bind_text(stmt, 4, [userId UTF8String], -1, NULL);
//5.执行sql语句
int step = sqlite3_step(stmt);
if (step == SQLITE_ERROR) {
NSLog(@"stmt执行失败!");
//关闭数据库
sqlite3_close(_sqlite);
return NO;
}
//关闭数据库 关闭编译后的stmt
sqlite3_finalize(stmt);
sqlite3_close(_sqlite);
NSLog(@"更新成功");
return YES;
}
2.6根据userId删除一条数据
- (BOOL)deleteDataWithUserId:(NSString *)userId{
//1.打开数据库
if (![self openTheDatabase]) {
return NO;
}
//2.编写sql语句 value值需要绑定 ?代替
NSString *sqlStr = @"delete from t_user where userId = ? ";
//3.编译sql语句
//声明stmt
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);
//编译不成功直接返回
if (result != SQLITE_OK) {
NSLog(@"编译失败");
return NO;
}
//4.绑定参数
sqlite3_bind_text(stmt, 1, [userId UTF8String], -1, NULL);
//5.执行sql语句
int step = sqlite3_step(stmt);
if (step == SQLITE_ERROR) {
NSLog(@"stmt执行失败!");
//关闭数据库
sqlite3_close(_sqlite);
return NO;
}
//关闭数据库 关闭编译后的stmt
sqlite3_finalize(stmt);
sqlite3_close(_sqlite);
NSLog(@"删除成功");
return YES;
}
3.demo地址https://github.com/gunmm/SQLiteDemo.git