数据库 Sqlite数据库

来源:互联网 发布:观察者模式java代码 编辑:程序博客网 时间:2024/06/07 14:10
@interface ViewController () {
    //创建数据库指针
    sqlite3 *db;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //数据库, 存储数据的仓库, 数据以表的形式存放在数据库中, 表中每一列都有一个名字(字段), 其中有一个字段标示数据的唯一性, 称为主键, 主键唯一, 不为空
    
    //常见的数据库有: access, MySQL, SQLServer, Oracel
    //移动开发常用的轻量级数据库: sqlite
    
    //对于数据库进行操作, 要使用到SQL(结构化查询语言)
    //常用的操作有: 创建表, 增删改查数据
    
    //insert into 表名 (字段名1, 字段名2, ...) values (值1, 值2, ...)
    //update 表名 set 字段名1 = 值1, 字段名2 = 值2, ... where id = 值
    //select *from 表名
    //select 字段名1, 字段名2, ... from 表名
    //select *from 表名 where id = 值
    //注: SQL语言本身不区分大小写, 也不区分 " 和 ' , 但是, 语句中的表名, 字段和值都区分大小写, 字符串要加双引号或单引号
    
    
    
}
//对Sqlite数据库进行操作

//1. 导入 libsqlite3.0.dylib
//2. 引入头文件 <sqlite3.h>



- (IBAction)open:(UIButton *)sender {
    //判断数据库是否打开了, 如果打开了就不用再次执行打开操作
    if (db) {
        return;
    }
    
    //.sqlite文件的路径
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *dbPath = [NSString stringWithFormat:@"%@/database.sqlite", docPath];
    NSLog(@"%@", dbPath);
    //[dbPath UTF8String], 把字符串从OC转成C的类型
    
    //创建一个数据库指针
    db = nil;
    
    //打开数据库, 并把给定 数据库指针 指向 打开的数据库
    int result = sqlite3_open([dbPath UTF8String], &db);
    if (result == SQLITE_OK) {
         NSLog(@"打开数据库成功");
    } else {
        NSLog(@"打开数据库失败");
    }
    
}

- (IBAction)creat:(UIButton *)sender {
    
    //创建sql语句
    NSString *sqlString = @"CREATE TABLE \"Girl\" (\"id\" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , \"name\" TEXT DEFAULT 傻逼, \"gender\" TEXT DEFAULT 女, \"age\" INTEGER DEFAULT 18)";
    
    //创建表
    char *error = NULL;
    int result = sqlite3_exec(db, [sqlString UTF8String], NULL, NULL, &error);
    if (result == SQLITE_OK) {
        NSLog(@"创建表成功");
    } else {
        NSLog(@"创建表失败%s", error);
    }
    
}

- (IBAction)add:(UIButton *)sender {
    
    NSString *string = @"insert into Girl (name, age, gender) values ('奎因', 28, '女')";
    char *error = nil;
    int result = sqlite3_exec(db, [string UTF8String], NULL, NULL, &error);
    if (result == SQLITE_OK) {
        NSLog(@"插入成功");
    } else {
        NSLog(@"插入失败%s", error);
    }
    
    
}
- (IBAction)update:(id)sender {
    NSString *upDate = @"update Girl set name = '蛮王' where id = 2";
    char *error = nil;
    int result = sqlite3_exec(db, [upDate UTF8String], NULL, NULL, &error);
    if (result == SQLITE_OK) {
        NSLog(@"更改成功");
    }else {
        NSLog(@"更改失败%s", error);
    }
    
}

- (IBAction)delete:(id)sender {
    NSString *delete = @"delete from Girl where id = 4";
    char *error = nil;
    int result = sqlite3_exec(db, [delete UTF8String], NULL, NULL, &error);
    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
    }else {
        NSLog(@"删除失败%s", error);
    }
}

- (IBAction)select:(id)sender {
    //sql语句
    NSString *selectString = @"select * from Girl";
    
    //sql语句指针, statement
    sqlite3_stmt *stmt = nil;
    
    //sql语句和指针联系起来
    int result = sqlite3_prepare(db, [selectString UTF8String], -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"关联成功");
        //单步执行, 把查询结果一条一条的找到
        //判断有没有一行数据
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            
            //找到某一列的数据
            int ID = sqlite3_column_int(stmt, 0);
            const unsigned char *name = sqlite3_column_text(stmt, 1);
            const unsigned char *gender = sqlite3_column_text(stmt, 2);
            int age = sqlite3_column_int(stmt, 3);
            
            NSString *nameString = [[NSString alloc] initWithUTF8String:(const char *)name];
            NSString *genderString = [[NSString alloc] initWithUTF8String:(const char *)gender];
            
            NSLog(@"%d, %@, %@, %d", ID, nameString, genderString, age);
            
        }
    }else {
        NSLog(@"关联失败");
    }
    //释放语句指针
    sqlite3_finalize(stmt);
    
}

- (IBAction)close:(id)sender {
    //判断数据库是否处于打开状态
    if (db == NULL) {
        return;
    }
    
    //关闭数据库
    int result = sqlite3_close(db);
    db = NULL;
    if (result == SQLITE_OK) {
        NSLog(@"关闭数据库成功");
    } else {
        NSLog(@"关闭数据库失败");
    }
    
    
    
}

0 0
原创粉丝点击