• ios sqlite 简单使用


    //
    //  ViewController.m
    //  sqlitedemo
    //
    //  Created by lam_TT on 15-4-11.
    //  Copyright (c) 2015年 lam_TT. All rights reserved.
    //
    
    #import "ViewController.h"
    #import <sqlite3.h>
    @interface ViewController () {
         sqlite3 *_db;
    }
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self openSQLite];
        [self initButton];
        
    }
    
    - (void)initButton {
        NSArray *array = [[NSArray alloc]initWithObjects:@"增",@"删",@"改",@"查", nil];
        for (int i = 0; i < 4; i ++) {
            UIButton *button = [[UIButton alloc]init];
            button.bounds = CGRectMake(0, 0, 150, 30);
            button.tag = 10 + i;
            [button setTitle:array[i] forState:UIControlStateNormal];
            button.backgroundColor = [UIColor grayColor];
            [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
            button.center = CGPointMake(CGRectGetWidth(self.view.bounds)/2, 100 + i * 50);
            [self.view addSubview:button];
        }
    }
    
    #pragma mark - 按钮点击事件
    
    - (void)buttonPressed:(UIButton *)sender {
        NSInteger index = sender.tag - 10;
        
        switch (index) {
            case 0:
                [self initInsertData];
                break;
                
            case 1:
                [self initDelete];
                break;
            case 2:
                [self initUpdata];
                break;
            case 3:
                [self initSelect];
                break;
        }
    
    }
    
    #pragma mark - 创建数据库
    - (void)openSQLite {
    //    sqlite3 *db;
        //路径
        NSString *string = [NSString stringWithFormat:@"%@/Documents",NSHomeDirectory()];
        NSString *fileName = [string stringByAppendingString:@"/students.sqlite"];
        //OC-C
        const char *cfileName = fileName.UTF8String;
        
        //打开数据库,没有就自动创建
        int result = sqlite3_open(cfileName, &_db);
        
        if (result == SQLITE_OK) {
            NSLog(@"成功打开数据库");
        }else {
            NSLog(@"打开数据库失败");
        }
        //可用sqliteManger查看
        
    #pragma mark - 创建表
        
        const char  *sql="CREATE TABLE IF NOT EXISTS t_students (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
        
        char *errmsg = NULL;
        
        //参数:第一个参数为数据库的句柄(db),第二个参数为sql语句,第三个参数为回调参数,是一个指向函数的指针,如果把callback前面的*改成^则就是一个block代码段,第四个参数可以写NULL,第五个参数为错误信息,用以代码调试。
        result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
        
        if (result == SQLITE_OK) {
            NSLog(@"创建表成功");
        }else {
            printf("创表失败---%s----%s---%d",errmsg,__FILE__,__LINE__);
        }
    }
    
    #pragma mark - 插入数据
    
    - (void)initInsertData {
    
        for (int i = 0; i < 20; i ++) {
            //1.拼接sql语句
            
            NSString *name = [NSString stringWithFormat:@"数据--%d",arc4random_uniform(100)];
            
            int age = arc4random_uniform(20) + 10;
            
            NSString *sql=[NSString stringWithFormat:@"INSERT INTO t_students (name,age) VALUES ('%@',%d);",name,age];
            
            //2.执行sql语句
            
            char *errmsg = NULL;
            sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
            if (errmsg) { //如果有错误信息
                NSLog(@"插入数据失败-- %s",errmsg);
            }else {
                NSLog(@"插入数据成功");
            }
            
        }
        
    }
    
    #pragma mark - 选择(select)查询操作
    
    - (void)initSelect {
        //从这个表里面查找年龄小于20得数据
        const char *sql="SELECT id,name,age FROM t_students WHERE age<20;";
        sqlite3_stmt *stmt = NULL;
        
        //进行查询前得准备工作
        
        
        if (sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL) == SQLITE_OK) { //SQL语句没有问题
            NSLog(@"SQL语句没有问题");
            //每调用一次sqlite_step函数,stmt就会指向下一条记录
            while (sqlite3_step(stmt) == SQLITE_ROW) {
                //取出数据
                //(1)取出第0列字段得值(int类型得值)
                int ID = sqlite3_column_int(stmt, 0);
                //(2)取出第2列字段得值(text类型得值)
                const unsigned char *name = sqlite3_column_text(stmt, 1);
                //(3)取出第2列字段得值
                int age = sqlite3_column_int(stmt, 2);
                printf("%d %s %d
    ",ID,name,age);
            }
            
            
        }else {
            NSLog(@"查询语句有问题,或者没有数据");
        }
        
    }
    
    #pragma mark - 删除数据
    
    - (void)initDelete {
        const char *sql = "delete from t_students";
        char *errmsg = NULL;
        sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
        if (errmsg) {
            NSLog(@"删除失败");
        }else {
            NSLog(@"删除成功");
        }
    }
    
    - (void)initUpdata {
        const char *sql = "update t_students set name = '小明' , age = 16 ;";
        char *errmsg = NULL;
        sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
        if (errmsg) {
            NSLog(@"修改失败");
        }else {
            NSLog(@"修改成功");
        }
    }
    
    @end
    
  • 相关阅读:
    java集合之HashMap源码解析
    springboot下多线程开发注意事项
    java集合之List源码解析
    关于Layer web弹层组件的加载(loading)层位置居中问题
    微信公众号支付提示mch_id参数格式错误
    ASP.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图
    C#常见金额优选类型及其三种常用的取整方式
    Mui Webview下来刷新上拉加载实现
    Select下拉框使用ajax异步绑定数据
    .NET、C#基础知识
  • 原文地址:https://www.cnblogs.com/hxwj/p/4416119.html
Copyright © 2020-2023  润新知