您的位置:首页 > 数据库

iOS--sqlite--增删改查

2015-10-26 20:36 288 查看
申明:此为本人学习笔记,若有纰漏错误之处的可留言共同探讨

/*
数据库操作步骤
1 加入类库,导入头文件
2 打开数据库 sqlite3_open (打开不成功把程序断掉)
3 对数据库进行操作 (统一步骤:把sqlite操作用字符串存储,判断sqlite_ok不成功的时候输出错误信息)
增 创建表--》添加数据

改(更新)
查 查完 sqlite3_finalize关闭
4 关闭数据库

*/

代码部分:

#import "ViewController.h"
#import <sqlite3.h>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

//打开数据库:假如这个路径下有这个文件的话直接打开;没有这个文件就先创建该文件,再打开
NSString *filePath = [self getFilePath];
sqlite3 *database = nil;
/*
参数的意思
参数1:文件路径c语言格式的字符串
参数2:数据库的操作对象,传进去一个数据库操作的指针
*/
if (sqlite3_open([filePath UTF8String], &database) != SQLITE_OK)
{
NSLog(@"数据库打开失败");
//断言:用来让程序崩溃。condition = YES 程序不会崩溃,condition = NO 程序会崩溃
NSAssert(NO, @"数据库打开失败");
}

// 数据库打开成功之后
NSString *createSQL = @"CREATE TABLE IF NOT EXISTS students(id integer primary key,name text,age integer,sex text)";
char *errmsg = nil;
/*
参数
1.数据库操作对象
2.数据库操作语句,c语言格式的字符串
3.c语言的方法,属于一个回调
4.也是给回调方法传递的参数
5.执行sql语句的错误信息
*/

if (sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errmsg) != SQLITE_OK)
{
NSLog(@"创建表失败 %s",errmsg);
}

// // 创建成功之后
// NSString *insertSQL0 = @"INSERT INTO students(name,age,sex) VALUES('xiao',153,'man')";
// if (sqlite3_exec(database, [insertSQL0 UTF8String], NULL, NULL, &errmsg)!= SQLITE_OK)
// {
// NSLog(@"插入数据失败");
// }
// NSString *insertSQL1 = @"INSERT INTO students(name,age,sex) VALUES('d',5,'woman')";
// if (sqlite3_exec(database, [insertSQL1 UTF8String], NULL, NULL, &errmsg)!= SQLITE_OK)
// {
// NSLog(@"插入数据失败");
// }
// NSString *insertSQL2 = @"INSERT INTO students(name,age,sex) VALUES('hhg',15,'man')";
// if (sqlite3_exec(database, [insertSQL2 UTF8String], NULL, NULL, &errmsg)!= SQLITE_OK)
// {
// NSLog(@"插入数据失败");
// }
// NSString *insertSQL3 = @"INSERT INTO students(name,age,sex) VALUES('xxx',56,'woman')";
// if (sqlite3_exec(database, [insertSQL3 UTF8String], NULL, NULL, &errmsg)!= SQLITE_OK)
// {
// NSLog(@"插入数据失败");
// }

// // 更新
// NSString *updateSQL = @"UPDATE students SET name = 'liuliu' WHERE name = 'xxx'";
// if (sqlite3_exec(database, [updateSQL UTF8String], NULL, NULL, &errmsg) != SQLITE_OK)
// {
// NSLog(@"更新数据失败 %s",errmsg);
// }else
// {
// NSLog(@"更新数据成功");
// }

// 删除
NSString *deleteSQL = @"DELETE FROM students WHERE id = 3";
if (sqlite3_exec(database, [deleteSQL UTF8String], NULL, NULL, &errmsg) != SQLITE_OK)
{
NSLog(@"删除数据失败");
}

// 插入数据成功之后
// 查询
/*
1.数据库操作对象
2.查询语句
3.读取的字节数。一般情况下我们全部读取:-1表示不限制读取的字节数
4.保存的是读出来的所有数据,保存的每一条记录
5.保存的是,如果第三个参数不是负数,那么没读完的字节都保存pzTail里面
*/

NSString *selectSQL = @"SELECT * FROM students";
sqlite3_stmt *stmt = nil;
//判断,资源分配成功,再去取每一条记录
if (sqlite3_prepare_v2(database,[selectSQL UTF8String],-1,&stmt,NULL) == SQLITE_OK)
{
//sqlite3_step(stmt) == SQLITE_DONE 代表读取完毕,没有下一条数据
//sqlite3_step(stmt) == SQLITE_ROW 代表没有读取完毕,还有下一条数据
while (sqlite3_step(stmt) == SQLITE_ROW) {
//获取每一条数据
//保存的数据对象stmt,获取这个字段的索引位从0开始
char *name = (char *)sqlite3_column_text(stmt, 1);
int rowID = sqlite3_column_int(stmt, 0);
char *sex = (char *)sqlite3_column_text(stmt, 3);
int age = sqlite3_column_int(stmt, 2);

NSLog(@"查询到的数据 rowID = %d name = %s age = %d sex = %s",rowID,name,age,sex);
}
}
sqlite3_finalize(stmt);
sqlite3_close(database);

}
#pragma mark - 获取路径
-(NSString *)getFilePath
{
NSLog(@"%@",NSHomeDirectory());
return [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/dababase.sqlite"];
}

附上完整demo:http://download.csdn.net/detail/csdn_hhg/9214899
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: