SQlite3(轻型数据库)

这里写图片描述

1. main.m文件

#import <Foundation/Foundation.h>
#import "SQLManger.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        SQLManger* sql = [SQLManger shareSqlManger];
        [sql createTable];
        //查
        [sql selectMessage];
        //增
//        [sql IncreaseMessage];
        //删
//        [sql DeleteMessage];  
        //改
        [sql changeMessage];
    }
    return 0;
}

2. SQLManger.h 文件

#import <Foundation/Foundation.h>
#import <sqlite3.h>

@interface SQLManger : NSObject
{
    sqlite3* db;//声明数据库对象
}

//类方法单例创建实例对象的方法
+(SQLManger*)shareSqlManger;
//创建数据表
-(void)createTable;
//查询数据表数据
-(void)selectMessage;
//增加数据表数据
-(void)IncreaseMessage;
//删除数据表数据
-(void)DeleteMessage;
//改变数据表数据
-(void)changeMessage;
@end

3. SQLManger.m 文件

#import "SQLManger.h"

//声明一个全局的静态变量,来记录SQLManger对象是否被创建(定义一个静态区指针 连接数据库 让数据库再程序结束后自动释放)
static SQLManger* sqlManger = nil;

@implementation SQLManger

//类方法单例创建实例对象的方法
+(SQLManger*)shareSqlManger
{
    if (sqlManger == nil) {
        sqlManger = [[SQLManger alloc]init];
    }
    return sqlManger;
}


//创建数据表
-(void)createTable
{
//    //获取文件的相对路径
//    NSString* path = [[NSBundle mainBundle]pathForResource:@"nibaba" ofType:@"sqkute"];
//    //读取plist文件的内容
//    NSArray* arr = [NSArray arrayWithContentsOfFile:path];
//    NSLog(@"arr == %@", arr);

//    //获取家目录
//    NSString* homePath = NSHomeDirectory();
//    NSLog(@"家目录:%@",homePath);
//    //获取Documents路经
//    NSArray* pathArr1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//    NSString* docuPath = [pathArr1 objectAtIndex:0];
//    NSLog(@"Documents路径:%@",docuPath);
//    NSString* path = [docuPath stringByAppendingPathComponent:docuPath];
//    NSLog(@"path == %@", path);
//    //这个只限于IOS应用在mac应用中就不适应

//    //获取数据库路径
//    NSString* path = @"/Users/user/Downloads/数据库";
//    //文件管理器
//    NSFileManager* fileManager = [NSFileManager defaultManager];
//    //判断数据库是否存在
//    BOOL fild = [fileManager fileExistsAtPath:path];
//    
//    如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)
//    if (fild) {
//        NSLog(@"文件库存在。。。。");
//    }else{
//        NSLog(@"文件库不存在。。。");
//    }

    //获取数据库路径
    NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
    //打开数据库
    //第一个参数是数据库的路径,c的字符串类型
    //第二个参数是数据库的对象
    //SQLITE_OK 是宏定义代表语句操作成功
    if (sqlite3_open([path UTF8String], &db) == SQLITE_OK) {
        //NSString* createTable = @"CREATE TABLE IF NOT EXISTS STUDENT (sid text primary key,name text)";
        NSString* createTable=@"CREATE TABLE IF NOT EXISTS STUDENG  (SID TEXT PRIMARY KEY,NAME TEXT);";
        //执行创建表的aql语句
        //第一个参数是数据库的对象
        //第二个参数是sql语句,c的字符串类型
        //第三个参数是回调方法
        //第四个参数是回调方法的参数
        //第五个参数是错误信
        char* error;
        //sqlite3_exec 打开数据库时,如果存在数据库就打开,如果不存在就会创建并打开
        if (sqlite3_exec(db, [createTable UTF8String], nil, nil, &error) == SQLITE_OK) {
            NSAssert(YES, @"数据表格创建成功%s", error);
            NSLog(@"数据表格创建成功");
        }else{
            NSAssert(NO, @"数据表格创建失败%s", error);
            NSLog(@"数据表格创建失败");
        }
        //关闭数据库
        sqlite3_close(db);

    }

}

//查询数据表数据
-(void)selectMessage
{
    //获取数据库路径
    NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
    //打开数据库
    if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
        //? 是占位符
        NSString* selectSql = @"select *from areaCode where id=?";
        //创建语句对象
        sqlite3_stmt* stmt;

        //执行sql语句的预处理
        //第一个参数是数据库对象
        //第二个参数是执行的sql语句
        //第三个参数是语句的执行长度,-1代表全部执行
        //第四个参数是语句对象
        //第五个参数是没有执行的部分,一般会全部执行,一般填nil
        sqlite3_prepare_v2(db, [selectSql UTF8String], -1, &stmt, NULL);

        //绑定参数,并实现查找
        //第一个参数是语句对象
        //第二个参数是语句编号,从1开始
        //第三个参数是所要绑定参数的值
        sqlite3_bind_int(stmt, 1, 10);

        //获取查询出来的值
        if (sqlite3_step(stmt) == SQLITE_ROW) {
            //获取一行数据有多少列
            NSLog(@" ====== %d", sqlite3_column_count(stmt));
            char* s = (char*)sqlite3_column_text(stmt, 1);
            NSLog(@" ------ %@",[NSString stringWithFormat:@"%s", s]);
            //获取ID的值
            NSLog(@"------%d",sqlite3_column_int(stmt, 0));
            sqlite3_finalize(stmt);//释放语句
        }else{
            sqlite3_finalize(stmt);//释放语句
            sqlite3_close(db);
        }
    }else{
        sqlite3_close(db);
    }
}

//增加数据表数据
-(void)IncreaseMessage
{
    //获取数据库路径
    NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
    //打开数据库
    if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
        NSString *increase = @"insert into areaCode(id,location,countryCodeID) values (1,'镇魂街',02)";
        char* error;
        //sqlite3_exec 打开数据库时,如果存在数据库就打开,如果不存在就会创建并打开
        if (sqlite3_exec(db, [increase UTF8String], nil, nil, &error) == SQLITE_OK) {
            NSLog(@"增加数据表数据成功");
        }else{
            NSLog(@"增加数据表数据失败 == %s", error);
        }
    }
}

//删除数据表数据
-(void)DeleteMessage
{
    //获取数据库路径
    NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
    //打开数据库
    if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
        //删除id为1的一行数据,如果要删两行就 id = 1 or id = 10 ,删除id为1和10行的数据
        NSString *Delete = @"delete from areaCode  where id = 1";
        char* error;
        //sqlite3_exec 打开数据库时,如果存在数据库就打开,如果不存在就会创建并打开
        if (sqlite3_exec(db, [Delete UTF8String], nil, nil, &error) == SQLITE_OK) {
            NSLog(@"删除数据表数据成功");
        }else{
            NSLog(@"删除数据表数据失败 == %s", error);
        }
    }
}

//改变数据表数据
-(void)changeMessage
{
    //获取数据库路径
    NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
    //打开数据库
    if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
        NSString *change = @"update areaCode set location = '镇魂街' WHERE id = 1";
        char* error;
        //sqlite3_exec 打开数据库时,如果存在数据库就打开,如果不存在就会创建并打开
        if (sqlite3_exec(db, [change UTF8String], nil, nil, &error) == SQLITE_OK) {
            NSLog(@"改变数据表数据成功");
        }else{
            NSLog(@"改变数据表数据失败 == %s", error);
        }
    }
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值