DataBase

数据库操作 只是为我们提供两个功能 打开数据库和关闭数据库   

对于应用程序来说,一个数据库足以

想要使用sqlite需要进行两部操作

1.导入动态链接库 libsqlite3.0.dalib

2.导入头文件 #import <sqlite3.h>


//打开数据库
+(sqlite3 *)openDataBase
{
    //@synchronized  安全锁
    if (sqlite) {
        return sqlite;
    }
    
    //创建数据库
    //获取documents 文件路径
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    NSLog(@"%@",documentsPath);
    //文件拼接
    NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"DB.sqlite"];
    //打开
    //通过路径查询到文件 如果文件存在,打开 如果不存在 先进行创建,在打开
    int result = sqlite3_open([dbPath UTF8String], &sqlite);
    if (result == SQLITE_OK) {
        NSLog(@"打开数据库成功");
        
        //创建表单
        //创建sql语句
        NSString *sql = @"CREATE TABLE Student (stu_ID INTEGER PRIMARY KEY NOT NULL, name TEXT NOT NULL,sex TEXT NOT NULL,age INTEGER NOT NULL DEFAULT 1000,score FLOAT NOT NULL)";
        sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, NULL);
        
    }
    
    return sqlite;
    
}

//关闭数据库
+(void)closeDataBase
{
    int result = sqlite3_close(sqlite);
    if (result == SQLITE_OK) {
        sqlite = nil;
    }
}

//插入
- (IBAction)insertAction:(id)sender {
    //1.打开数据库
    sqlite3 *db = [DatabaseHandle openDataBase];
    //2.创建指令集(伴随指针)
    sqlite3_stmt *stmt = nil;
    //3.创建sql语句
    NSString *sql = @"INSERT INTO Student(name,sex,age,score)VALUES (?,?,?,?)";
    //4.语法检查
    //sqlite3 *db : 数据库指针
    //const char *zSql : C语言的sql语句
    //int nByte : 给定sql语句的长度,一般我们给-1,表示无穷大,不限制长度
    //sqlite3_stmt **ppStmt : 伴随指针的地址,存放sql语句和数据库地址信息
    //const char **pzTail : 预留参数
    //语法检查的作用:不会执行sql语句,只是检查数据库是否正确打开,sql语句是否正确 如果正确,将数据库的信息和sql语句的信息,放入伴随指针中

    int flag = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);
    
    //5.判断语法检查是否正确
    if (flag == SQLITE_OK) {
        
        //6.参数绑定
        sqlite3_bind_text(stmt, 1, [_nameLabel.text UTF8String], -1, nil);
        sqlite3_bind_text(stmt, 2, [_sexLabel.text UTF8String], -1, nil);
        sqlite3_bind_int(stmt, 3, [_ageLabel.text intValue]);
        sqlite3_bind_double(stmt, 4, [_scoreLabel.text doubleValue]);
        
        //7.执行
        sqlite3_step(stmt);
        
        //8.释放所有权
        sqlite3_finalize(stmt);
        
        //9.关闭数据库
        [DatabaseHandle closeDataBase];
    }
}

//查询
- (IBAction)selectAction:(id)sender {
    
    //1.打开数据库
    sqlite3 *sqlite = [DatabaseHandle openDataBase];
    //2.创建指令集
    sqlite3_stmt *stmt = nil;
    //3.创建sql语句
    NSString *sql = @"SELECT *FROM Student WHERE stu_ID = ?";
    //4.语法检查
    int flag = sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, nil);
    //5.判断语法检查是否正确
    if (flag == SQLITE_OK) {
        //6.参数绑定
        sqlite3_bind_int(stmt, 1, [_numberLabel.text intValue]);
        
        //7.执行
        //对于sqlite3_step()在查询时,可能会有多个符合条件的数据条 当查询完一条数据时,sqlite3_step()会往下看有没有下一条数据 如果有,返回SQLITE_ROW,如果没有,返回SQLITE_DONE
        //所以,我们在进行查询时 以sqlite3_step()是否等于SQLITE_ROW作为循环获取数据的条件
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            //获取数据
            char *nameC = (char *)sqlite3_column_text(stmt, 1);
            char *sexC = (char *)sqlite3_column_text(stmt, 2);
            int ageC = sqlite3_column_int(stmt, 3);
            double scoreC = sqlite3_column_double(stmt, 4);
            
            //转化为OC中的类型
            NSString *name = [NSString stringWithUTF8String:nameC];
            NSString *sex = [NSString stringWithUTF8String:sexC];
            NSString *age = [NSString stringWithFormat:@"%d",ageC];
            NSString *score = [NSString stringWithFormat:@"%f",scoreC];
            
            _nameLabel.text = name;
            _sexLabel.text = sex;
            _ageLabel.text = age;
            _scoreLabel.text = score;
        }
    }
    
    //8.释放所有权
    sqlite3_finalize(stmt);
    //9.关闭数据库
    [DatabaseHandle closeDataBase];
    
}

//更新
- (IBAction)updateAction:(id)sender {
    
    //1.打开数据库
    sqlite3 *db = [DatabaseHandle openDataBase];
    //2.创建指令集
    sqlite3_stmt *stmt = nil;
    //3.创建sql语句
    NSString *sql = @"UPDATE Student SET sex = ? WHERE name = ?";
    //4.语法检查
    int flag = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);
    //5.判断语法检查是否正确
    if (flag == SQLITE_OK) {
        
        //6.绑定参数
        sqlite3_bind_text(stmt, 1, [_sexLabel.text UTF8String], -1, nil);
        sqlite3_bind_text(stmt, 2, [_nameLabel.text UTF8String], -1, nil);
        //7.执行
        sqlite3_step(stmt);
    }
    //8.释放所有权
    sqlite3_finalize(stmt);
    //9.关闭数据库
    [DatabaseHandle closeDataBase];
    
}

//删除
- (IBAction)deleteAction:(id)sender {
    
    //1.打开数据库
    sqlite3 *db = [DatabaseHandle openDataBase];
    //2.创建指令集
    sqlite3_stmt *stmt = nil;
    //3.创建sql语句
    NSString *sql = @"DELETE FROM Student WHERE name = ?";
    //4.语法检查
    int flag = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);
    //5.判断语法检查是否正确
    if (flag == SQLITE_OK) {
        //6.参数绑定
        sqlite3_bind_text(stmt, 1, [_nameLabel.text UTF8String], -1, nil);
    }
    //7.执行
    sqlite3_step(stmt);
    //8.释放所有权
    sqlite3_finalize(stmt);
    //9.关闭数据库
    [DatabaseHandle closeDataBase];
       
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值