SQlite3(轻型数据库)

来源:互联网 发布:淘宝怎么搜到假证 编辑:程序博客网 时间:2024/05/01 23:43

这里写图片描述

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