iOS--sqlite--增删改查

/*  数据库操作步骤

 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值