浅析SQLite数据库(基础教学)

SQLite采用动态数据类型,可以跨平台使用,不像CoreData是苹果专用的:先介绍一下在Xcode中的简单使用:

先连接数据库如图:

 

然后引入头文件#import <sqlite3.h>

代码开始前先介绍一下sq语句:

//1.创建表
语法:
create table 表名(字段1 类型 约束1 约束2, 字段2 类型 约束1 约束2);
create table if not exists 表名(字段1 类型 约束1 约束2, 字段2 类型 约束1 约束2);
//事例:
需求:创建一个student表,表中的字段有学号,姓名,年龄,学号约束条件:主键,自增,不能为空;姓名默认为‘无名氏’;年龄:大于16岁;
create table student(s_id integer primary key autoincrement not null, s_name text default '无名氏', s_age integer check (s_age > 16));
//2.插入数据
语法:
insert into 表名(字段1, 字段2, 字段3)values(字段1值, 字段2值, 字段3值);
//事例:插入学生姓名,年龄
insert into student(s_name, s_age)values('贝爷', 30);
insert into student(s_name, s_age)values('小李子', 40);
//3.更新数据
语法:
update 表名 set 字段名1 = 修改值1, 字段名2 = 修改值2 where 条件;
update student set s_age = 25 where s_age = 30;
//4.删除数据
语法:
delete from 表名 where 条件;
//需求:删除年龄为10岁的学生
delete from student where s_age = 10;
//5.查询数据
语法:
select 要查找的字段 from 表名 where 条件;
select *from student where s_name = '贝爷';//查询所有信息
select s_id, s_age from student where s_name = '贝爷';

下面就开始代码了:

#import "DataBaseHandle.h"
#import <sqlite3.h>

@interface DataBaseHandle ()
//数据库的存储路径
@property (nonatomic, copy) NSString *dbPath;
@end

static DataBaseHandle *dataBase = nil;
@implementation DataBaseHandle
//单例
+ (DataBaseHandle *)shareDataBaseHandle {
    
    if (dataBase == nil) {
        dataBase = [[DataBaseHandle alloc] init];
    }
    return dataBase;
}
//懒加载需要给数据库路径赋值
- (NSString *)dbPath {
    if (_dbPath == nil) {
       //需求:路径存储在Documents文件夹下,数据库文件为person.sqlite;
        NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        _dbPath = [documentPath stringByAppendingPathComponent:@"person.sqlite"];
    }
    return _dbPath;
}
//打开数据库;好多地方都会使用到数据库,所以初始化一个数据库 的静态变量
static sqlite3 *db = nil;
- (void)openDataBase {
  //打开数据库,使用int去接收打开的结果
    //第一个参数:表示数据库的存储路径
    //第二个参数:二级指针,数据库的地址
    int result = sqlite3_open([self.dbPath UTF8String], &db);
    //result是个枚举值,有很多种情况
    if (result == SQLITE_OK) {
        NSLog(@"数据库打开成功");
    } else {
        NSLog(@"数据库打开失败");
    }
}

- (void)updateWithUID:(NSInteger)uid {
    NSString *updateStr = @"update person set name = '悟空' where uid = ?";
    sqlite3_stmt *stmt = nil;
    int result = sqlite3_prepare(db, updateStr.UTF8String, -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        
        sqlite3_bind_int64(stmt, 1, uid);
        if (sqlite3_step(stmt) == SQLITE_DONE) {
            NSLog(@"更新数据成功");
        } else {
            NSLog(@"更新数据失败");
        }
    } else {
        NSLog(@"result = %d", result);
    }
    sqlite3_finalize(stmt);
}

- (void)deleteWithUID:(NSInteger)uid {
    
    NSString *deleteStr = [NSString stringWithFormat:@"delete from person where uid = %ld", uid];
    
    int result = sqlite3_exec(db, deleteStr.UTF8String, NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
    } else {
        NSLog(@"删除失败");
    }
}

以上只是简单举例。

注意点:OC中字符串别忘了加@    数据库中的%@写成‘%@’   别忘了加单引号(字符串加单引号,integer不用加)
[NSString stringWithFormat:@"delete from person where name = ‘%@’“, name1]与@"delete from person where name = ’name1”
区别在于若name1 = @“liubei”;语句1表示name属性==liubei时满足条件;语句2表示name的属性==name1时满足条件;

 

posted @ 2016-05-12 22:09  吾悠南山  阅读(157)  评论(0编辑  收藏  举报