iOS开发中SQLite简单使用(基础用法:创建表,增、删、改、查)
2017-05-15 15:20
423 查看
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
<sqlite3.h>
然后创建实体类,类似于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
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
<sqlite3.h>
然后创建实体类,类似于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
相关文章推荐
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作
- [置顶] Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- iOS开发UI基础—24使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- ios开发UI基础—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- ioS开发之UI基础--使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- iOS开发UI基础—26简单介绍静态单元格的使用
- iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用
- 【iOS开发】 CoreText 使用教程:以创建一个简单的杂志应用为例
- sqlite 在 ios 开发的使用(基础)
- sqlite 在 ios 开发的使用(基础)
- iOS开发UI基础—08应用程序管理之xib的简单使用
- iOS开发UI基础—简单介绍静态单元格的使用
- iOS开发】 CoreText 使用教程:以创建一个简单的杂志应用为例
- 【转】iOS开发—SQLite的简单使用
- iOS开发:使用Xcode创建最简单的代码