IOS SqlLite3数据库

ios数据库操作 : 利用单例对数据库进行管理
数据库操作: 创建数据库 创建表 关闭数据库 增 删 改 查 操作

// 初始化单例方法   在单例中进行初始化
+ (SqlLiteManger *)shareManger;
// 如果要使用数据库  需要引用一个框架
    // 引入一个libsqlite3.0框架  引入头文件  sqlite3.h
// 数据库操作第一步  打开  数据库
- (sqlite3 *)openDB;

//  数据库  关闭
- (void)closeDB;

// 数据库 创建表
- (void)createTable;

// 数据库插入操作  StudentModel 是一个model类
- (void)insertInto:(StudentModel *)student;

// 删除   根据条件删除
- (void)deleStudentWithAge:(NSInteger)age;

// 修改  
 - (void)updataName:(NSString *)name setAge:(NSInteger)age;

// 查询  分为单条查询  和  多条查询
- (StudentModel *)selectName:(NSString *)name andAge:(NSInteger)age;

// 查询全部
- (NSArray *)selectAllStudent;

实现初始化方法 在初始化之前需要理解 ios中sqlLite3 的语句 在这最容易出现问题的就是sql语句

// 初始化  单例方法
+ (SqlLiteManger *)sharManger
{
   static  SqlLiteManger *man = nil;
   if (man == nil) {
   man = [[SqlLiteManger alloc]init];
   }
return man;
}

// 数据库操作之前需要  先定义个 指针   用来负责连接数据库  能够保证数据库从开始到结束都能够使用  在关闭的时候释放

// 创建连接数据库的指针
static sqlite3 *db = nil;

// 打开数据库
- (sqlite3 *)openDB
{
   if (db != nil) {
       return db;
   }
// 不存在就去创建一个数据库  先找到存放数据库的位置
NSString *document = [NSSearchPathForDirectoriesInDocument(NSDocumentDirectory, NSUserDomainMask, YES)lastobject];

// 在document 文件夹下面添加数据库文件
NSString  *path = [document stringByAppendPathCompoent:@"Student.sqlite"];

//  创建数据库  
int result = sqlite3_open(path.UTF8String, &db);
 if (result == SQLITE_OK) {
      NSLog(@"数据库创建成功");
  } else
     {
       NSLog(@"数据库创建失败");
     }
     return db;
}

// 关闭数据库
- (void)closeDB
{
   int result = sqlite3_close(db);

   if (result == SQLITE_OK) {
       NSLog(@"关闭成功");
       //  如果关闭成功  就把数据库置为空  下次操作的时候  再次创建
       db = nil;
     } else 
     {
        NSLog(@"关闭失败");
     }
}

操作数据库步骤大致有以下几步:
1 打开数据库
2 写sql语句
3 执行sql语句
4 判断sql语句 是否成功
5 关闭数据库

// 创建数据库表
- (void)createTable
 {
    db = [self openDB];

    NSString sql = @"create table IF NOT EXISTS LanStudent(number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL);";

int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);

if (result == SQLITE_OK) {
  NSLog(@"创建成功");
    } else
    {
      NSLog(@"创建失败");
    }
    [self closeDB];
 }

// 插入(增加)

- (void)insertInto:(StudentModel *)student
 {
    db = [self openDB];

NSString *sql = [NSString stingWithFormat:@"insert into LanStudent(number, name, gender, age) values('%ld', '%@', '%@', '%ld');", student.number, student.name, student.gender, student.age];

int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);

if (result == SQLITE_OK) {
    NSLog(@"插入成功");
} else
 {
    NSLog(@"插入失败");
 }
[self closeDB];
}

// 删除

- (void)deleStudentWithAge:(NSInteger)age
{
    db= [self openDB];

    NSString *sql = [NSString stringWithFormat:@"delete from LanStudent where age > '%ld'", age];

    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);

    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
    } else
    {
        NSLog(@"删除失败");
    }
    [self closeDB];
}

// 更改

//  更新数据库
- (void)updataName:(NSString *)name setAge:(NSInteger)age
{
    db = [self openDB];

    NSString *sql = [NSString stringWithFormat:@"update LanStudent set age = '%ld' where name = '%@'", age, name];

    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);

    if (result == SQLITE_OK) {
        NSLog(@"更改成功");
    } else
    {
        NSLog(@"更改失败");
    }
    [self closeDB];
}

// 查询

// 查询操作比其他的操作复杂 
// 单条查询
- (StudentModel *)selectName andAge:(NSInteger)age
 {
    db = [self openDB];

    NSString *sql = [NSString stringWithFormat:@"select * from LanStudent where name = @'%@' and age = '%ld'", name, age]; 
// 创建一个  跟随指针  用来保存sql语句
sqlite3_stmt *stmt = nil;

int result = sqlit3_prepare_v2(db, sql.UTF8Strig, -1, &stmt, NULL);
if(result == SQLITE_OK) {
   NSLog(@"成功");

  sqlite3_bind_text(stmt, 1, name.UFT8String, -1, NULL);
// 参数2 查询条件的顺序 
// 参数3 查询条件的字段名称  需要转换为c 语言格式 
// 参数4 长度 -1
// 参数5 绑定后执行的函数  一般写 NULL

sqlite3_bind_int(stmt,2, -1);

// 开始查询
while (sqlite3_step(stmt) == SQLITE_ROW) {
    char *name = (char *)sqlite3_column_text(stmt, 1);
    char *gender = (char *)sqlite3_column_text(stmt, 2);
    int age = sqlite3_column_int(stmt, 3);
    int number = sqlite3_column_int(stmt, 0);

//  给model赋值
StudentModel *model = [[StudentModel alloc]init];
model.name = [NSString stringWithUTF8String:name];
model.gender = [NSString stringWithUTF8String;gender];
model.age = age;
model.number = number;
//  释放跟随指针
sqlite3_finalize(stmt);

//  关闭数据库
[self closeDB];

// 返回数据  并且释放对象
[self closeDB];
return [model autorelease];
}
  } else 
    {
       NSLog(@"失败");
    }
[self closeDB];
return nil;
}

// 查询全部

//  查询所有
- (NSArray *)selectAllStudent
{
    // 1
    db = [self openDB];
    // 2
    NSString *sql = [NSString stringWithFormat:@"select * from LanOuStudent"];
    // 3 创建一个跟随指针
    sqlite3_stmt *stmt = nil;
    // 4 运行
    int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL);
    // 5
    if (result == SQLITE_OK) {
        NSLog(@"查询成功");
        //6  不用绑定 改成创建一个数组  用来保存  查询好的model
        NSMutableArray *array = [NSMutableArray array];
        // 7 开始查询
        while (sqlite3_step(stmt) == SQLITE_ROW) {
          // 8 读取数据
            char *name = (char *)sqlite3_column_text(stmt, 1);
            char *gender = (char *)sqlite3_column_text(stmt, 2);
            int age = sqlite3_column_int(stmt, 3);
            int number =sqlite3_column_int(stmt, 0);
            // 9 给model赋值
            LanOuStudent *model = [[LanOuStudent alloc]init];
            model.name = [NSString stringWithUTF8String:name];
            model.gender = [NSString stringWithUTF8String:gender];
            model.age = age;
            model.number = number;

            // 10 把model 放到数组里面

            [array addObject:model];
            // 11 释放学生对象
            [model release];
            }

        // 12 释放跟谁指针
        sqlite3_finalize(stmt);

        // 13 关闭数据库
        [self closeDB];

        // 14 返回数组
        return array;

    } else
    {
        NSLog(@"查询失败");
    }
    // 16
    [self closeDB];
    return  nil;
}

注释;在以后使用时发现查询全部出现问题,解决如下

#pragma mark -- 查询全部
- (NSArray *)selectAllActivity{
    NSMutableArray *selectArray = [NSMutableArray array];
    if ([self.db open]) {
        NSString *sql = [NSString stringWithFormat:@"select * from t_student ORDER BY dataTime DESC"];
        FMResultSet *set = [self.db executeQuery:sql];
        while ([set next]) {
            Student *student = nil;
            NSInteger num = [set intForColumn:@"num"];
            NSString * archiverKey = [NSString stringWithFormat:@"%@%ld",@"student",num];
            NSData *data = [set dataForColumn:@"data"];
            student = [[FMDBHelper shareManager]unarchiverObject:data forKey:archiverKey];
            [selectArray addObject:student];
        }
        [self.db close];
    }
    return selectArray;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值