iOS之SQLite使用详解
#pragma mark - 1.引入<sqlite3.h>头文件
//添加libsqlite3.0.tbd
#import <sqlite3.h>
static sqlite3 *db;//是指向数据库的指针,我们其他操作都是用这个指针来完成
#pragma mark - 2.打开数据库
- (void)openSqlite {
//判断数据库是否为空,如果不为空说明已经打开
if(db != nil) {
NSLog(@"数据库已经打开");
return;
}
//获取文件路径
NSString *str = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *strPath = [str stringByAppendingPathComponent:@"my.sqlite"];
NSLog(@"%@",strPath);
//打开数据库
//如果数据库存在就打开,如果不存在就创建一个再打开
int result = sqlite3_open([strPath UTF8String], &db);
//判断
if (result == SQLITE_OK) {
NSLog(@"数据库打开成功");
} else {
NSLog(@"数据库打开失败");
}
}
#pragma mark - 3.增删改查
//创建表格
- (void)createTable {
//1.准备sqlite语句
NSString *sqlite = [NSString stringWithFormat:@"create table if not exists 'student' ('number' integer primary key autoincrement not null,'name' text,'sex' text,'age'integer)"];
//2.执行sqlite语句
char *error = NULL;//执行sqlite语句失败的时候,会把失败的原因存储到里面
int result = sqlite3_exec(db, [sqlite UTF8String], nil, nil, &error);
//3.sqlite语句是否执行成功
if (result == SQLITE_OK) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败");
}
}
//添加数据
- (void)addStudent:(student *)stu {
//1.准备sqlite语句
NSString *sqlite = [NSString stringWithFormat:@"insert into student(number,name,age,sex) values ('%ld','%@','%@','%ld')",stu.number,stu.name,stu.sex,stu.age];
//2.执行sqlite语句
char *error = NULL;//执行sqlite语句失败的时候,会把失败的原因存储到里面
int result = sqlite3_exec(db, [sqlite UTF8String], nil, nil, &error);
if (result == SQLITE_OK) {
NSLog(@"添加数据成功");
} else {
NSLog(@"添加数据失败");
}
}
//删除数据
- (void)delete:(student*)stu {
//1.准备sqlite语句
NSString *sqlite = [NSString stringWithFormat:@"delete from student where number = '%ld'",stu.number];
//2.执行sqlite语句
char *error = NULL;//执行sqlite语句失败的时候,会把失败的原因存储到里面
int result = sqlite3_exec(db, [sqlite UTF8String], nil, nil, &error);
if (result == SQLITE_OK) {
NSLog(@"删除数据成功");
} else {
NSLog(@"删除数据失败%s",error);
}
}
//修改数据
- (void)updataWithStu:(student *)stu {
//1.sqlite语句
NSString *sqlite = [NSString stringWithFormat:@"update student set name = '%@',sex = '%@',age = '%ld' where number = '%ld'",stu.name,stu.sex,stu.age,stu.number];
//2.执行sqlite语句
char *error = NULL;//执行sqlite语句失败的时候,会把失败的原因存储到里面
int result = sqlite3_exec(db, [sqlite UTF8String], nil, nil, &error);
if (result == SQLITE_OK) {
NSLog(@"修改数据成功");
} else {
NSLog(@"修改数据失败");
}
}
//查询所有数据
- (NSMutableArray*)selectWithStu {
NSMutableArray *array = [[NSMutableArray alloc] init];
//1.准备sqlite语句
NSString *sqlite = [NSString stringWithFormat:@"select * from student"];
//2.伴随指针
sqlite3_stmt *stmt = NULL;
//3.预执行sqlite语句
int result = sqlite3_prepare(db, sqlite.UTF8String, -1, &stmt, NULL);//第4个参数是一次性返回所有的参数,就用-1
if (result == SQLITE_OK) {
NSLog(@"查询成功");
//4.执行n次
while (sqlite3_step(stmt) == SQLITE_ROW) {
student *stu = [[student alloc] init];
//从伴随指针获取数据,第0列
stu.number = sqlite3_column_int(stmt, 0);
//从伴随指针获取数据,第1列
stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)] ;
//从伴随指针获取数据,第2列
stu.sex = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)] ;
//从伴随指针获取数据,第3列
stu.age = sqlite3_column_int(stmt, 3);
[array addObject:stu];
}
} else {
NSLog(@"查询失败");
}
//5.关闭伴随指针
sqlite3_finalize(stmt);
return array;
}
#pragma mark - 4.关闭数据库
- (void)closeSqlite {
int result = sqlite3_close(db);
if (result == SQLITE_OK) {
NSLog(@"数据库关闭成功");
} else {
NSLog(@"数据库关闭失败");
}
}
iOS之SQLite使用详解的更多相关文章
- iOS 单元测试之XCTest详解(一)
iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...
- iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem
http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigati ...
- IOS—UITextFiled控件详解
IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGR ...
- [转]iOS学习之UINavigationController详解与使用(三)ToolBar
转载地址:http://blog.csdn.net/totogo2010/article/details/7682641 iOS学习之UINavigationController详解与使用(二)页面切 ...
- IOS 友盟使用详解
IOS 友盟使用详解 这篇博客将会详细介绍友盟的使用,希望对博友们有所帮助. 首先我们在浏览器上搜索友盟. 在这里我们选择官网这个,进去友盟官网后我们按照下图进行选择. 接下来选择如下图 Next 这 ...
- iOS原生地图开发详解
在上一篇博客中:http://my.oschina.net/u/2340880/blog/414760.对iOS中的定位服务进行了详细的介绍与参数说明,在开发中,地位服务往往与地图框架结合使用,这篇博 ...
- [Android新手区] SQLite 操作详解--SQL语法
该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法 :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...
- [转]iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController
转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加U ...
- iOS中—触摸事件详解及使用
iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...
随机推荐
- 硬盘GPT分区与MBR分区的转换
如何将gpt分区更改成mbr分区? "因为笔记本电脑硬盘分区表是GPT而导致大家无法安装引导系统.需要转换为MBR分区还能顺利安装." 问题是,分区工具无法转换MBR,这里小编知道 ...
- zTree实现地市县三级级联数据库映射
zTree实现地市县三级级联数据库映射 Province.hbm.xml: <?xml version="1.0" encoding="UTF-8"?&g ...
- SQL错误:ORA-12899
1.错误描述 SQL错误:ORA-12899:列"USER"."T_USER_TAB"."USER_ID"的值太大(实际值:4,最大值:2) ...
- java实现全排列问题
1.问题描述: 一组字符串的全排列,按照全排列的顺序输出,并且每行结尾无空格. 2.输入: 输入一个字符串 3.输入示例: 请输入全排列的字符串: abc 4.输出示例: a b c a c b b ...
- WPF基础篇之系统中141种颜色
WPF最大的特点就是酷炫的外观,在学习过程中经常看见各种渐变窗体.作为几乎没做过美工的程序员,我对各种颜色的argb值不熟,颜色的英文单词也只认识部分.为了不至于每次都用Colors点出颜色再随机挑选 ...
- 说出JQuery中常见的几种函数以及他们的含义是什么?
jQuery中常见的函数如下: (1)get()取得所有匹配的DOM元素集合. (2)get(index)取得其中一个匹配的元素.index表示取得第几个匹配的元素. (3)append(conte ...
- JDK 9.0.4安装过程
因为种种问题,怀疑是因为JDK版本不对劲,于是打算将JDK重新搞一下. 不看不知道,看了吓一跳,我的笔记本里现在起码有5.6甚至更多个JDK,JRE,并且由于年久失修,我也不知道这些东西怎么装上去的, ...
- 多米诺骨牌放置问题(状压DP)
例题: 最近小A遇到了一个很有趣的问题: 现在有一个\(n\times m\)规格的桌面,我们希望用\(1 \times 2\)规格的多米诺骨牌将其覆盖. 例如,对于一个\(10 \times 11\ ...
- [Baltic2004]数字序列
原题请见<左偏树的特点及其应用>BY 广东省中山市第一中学 黄源河 题意 给出序列\(a[1...n]\),要求构造序列\(b[1...n]\)使得\(\sum_{i=1}^{n}|a_i ...
- Splay树简单操作
前几天刚刚自学了一下splay,发现思路真简单实现起来好麻烦 先贴一下头文件 # include <stdio.h> # include <stdlib.h> # includ ...