SQLite数据库

1.创建数据库

// 声明数据库
static sqlite3 *db = nil;

#pragma mark 打开数据库
- (void)openDataBase
{

    if (db != nil) {
        return;
    }
    // 创建数据库
    
    //  1.保存数据库的路径
    NSString *path = [self getDataBasePath];
    NSLog(@"%@",path);
    
    // 2.拼接路径(数据库具体的文件)
    path = [path stringByAppendingString:@"/data.sqlite"];
    
    // 3.根据路径去打开数据库(如果数据库不存在---自动创建数据库)
    int result = sqlite3_open([path UTF8String], &db);
    
    // 4.判断数据库是否打开成功
    if (SQLITE_OK == result) {
        NSLog(@"数据库打开成功");
    }else{
    
        NSLog(@"数据库打开失败");
    }
}

2.创建表格

#pragma mark 创建表格
- (void)createTable:(NSString *)tableName
{

    // 创建表格 --- SQL语句                                            table不能少---很重要(没有会失败)
    
    NSString *creatTableString = [NSString stringWithFormat:@"CREATE TABLE '%@'('id' INT PRIMARY KEY,'name' TEXT,'sex' TEXT)",tableName];
    
    // 执行SQL语句
    int result = sqlite3_exec(db, [creatTableString UTF8String], NULL, NULL, NULL);
    
    if (result == SQLITE_OK) {
        NSLog(@"创建%@表成功",tableName);
    }else{
    
        NSLog(@"创建%@表失败",tableName);
    }
    
    
}



3.插入数据

#pragma makr 插入数据
- (void)insetIntoTableWithID:(int)nameID withName:(NSString *)name withSex:(NSString *)sex
{

    // 插入语句
    NSString *insertSql = [NSString stringWithFormat:@"INSERT INTO 'user_hh'('id','name','sex')VALUES('%d', '%@', '%@')",nameID,name,sex];
    // 执行SQL语句
    int result = sqlite3_exec(db, [insertSql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"插入成功");
    }else{
    
        NSLog(@"插入失败");
    }
}

4.删除数据

#pragma mark 删除数据
- (void)deleteDataFromTableWithID:(int)nameID
{

    // 写sql语句
    NSString *deleteSql = [NSString stringWithFormat:@"DELETE FROM 'user_hh' WHERE id = '%d'",nameID];
    int result = sqlite3_exec(db, [deleteSql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
    }else{
    
        NSLog(@"删除失败");
    }
}

5.更新数据

#pragma mark 更新数据
- (void)updateDataFromTableWithID:(int)nameID
{

    NSString *updateSql = [NSString stringWithFormat:@"UPDATE 'user_hh' set sex = '不男不女' where id = %d",nameID];
    
    int resquest = sqlite3_exec(db, [updateSql UTF8String], NULL, NULL, NULL);
    
    if (resquest == SQLITE_OK) {
        NSLog(@"更新成功");
    }else{
    
    
        NSLog(@"更新失败");
    }
}

6.查询数据库

#pragma mark 查询数据库
- (void)selectDataFromTable
{

    NSString *selectSql = [NSString stringWithFormat:@"SELECT *FROM 'user_hh'"];
   
    // 保存查询到的结果集
    sqlite3_stmt *stmt = nil;
    // 准备查询数据(预存取)
    int result = sqlite3_prepare(db, [selectSql UTF8String], -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        
        // 判断是否是最后一行,有没有必要继续下去
        // 这里用while循环 一行一行执行 ******不用if******
        while(sqlite3_step(stmt) == SQLITE_ROW) {
            // 拿出各列的数据
            
            // 1.拿出id列的数据
            int numberID = sqlite3_column_int(stmt, 0);
            
            // 2.拿出name列的数据
            const unsigned char *nameChar = sqlite3_column_text(stmt, 1);
            NSString *name = [NSString stringWithUTF8String:(const char *)nameChar];
            
            // 3.拿出sex列的数据
            const unsigned char *sexChar = sqlite3_column_text(stmt, 2);
            NSString *sex = [NSString stringWithUTF8String:(const char *)sexChar];
            
            NSLog(@"%d %@ %@",numberID,name,sex);
        }
        
        // 结束查询 --- 重要 ****** 否则无法关闭数据库******
        sqlite3_finalize(stmt);
    }
    
    
    
}

7.关闭数据库

#pragma mark 关闭数据库
- (void)closeDataBase
{

    // 关闭数据库
    int result = sqlite3_close(db);
    if (result == SQLITE_OK) {
        NSLog(@"关闭数据库成功");
    }else{
    
        NSLog(@"关闭数据库失败");
    }
    
}

 

posted @ 2015-07-24 16:44  百川hl  阅读(210)  评论(0编辑  收藏  举报