zoukankan      html  css  js  c++  java
  • SQLite3的运用

    1、导入库文件:libsqlite3。

    2、.m文件的代码:

      1 //
      2 //  ViewController.m
      3 //  SQLite3的运用
      4 //
      5 //  Created by PengYunjing on 16/9/24.
      6 //  Copyright © 2016年 PYJ. All rights reserved.
      7 //
      8 
      9 /**
     10  *  说明:
     11  *  sqlite3           *ppDb, 数据库句柄,跟文件句柄FILE很类似
     12  *  sqlite3_stmt      *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句
     13  *  sqlite3_open(),   打开数据库,没有数据库时创建。
     14  *  sqlite3_exec(),   执行非查询的sql语句
     15  *  sqlite3_step(),   在调用sqlite3_prepare后,使用这个函数在记录集中移动。
     16  *  sqlite3_close(),  关闭数据库文件
     17  *
     18  *  还有一系列的函数,用于从记录集字段中获取数据,如
     19  *  sqlite3_column_text(), 取text类型的数据。
     20  *  sqlite3_column_blob(), 取blob类型的数据
     21  *  sqlite3_column_int(),  取int类型的数据
     22  */
     23 
     24 #import "ViewController.h"
     25 #import <sqlite3.h>
     26 
     27 //设置数据库的路径
     28 #define FileName [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"personinfo.sqlite"]
     29 
     30 @interface ViewController ()
     31 
     32 @end
     33 
     34 @implementation ViewController
     35 //设置句柄, 通过句柄对数据库进行操作
     36 static sqlite3 *ppDb = nil;
     37 
     38 - (void)viewDidLoad {
     39     [super viewDidLoad];
     40   
     41     NSLog(@"%@", FileName);
     42     
     43     [self open];
     44 }
     45 
     46 /** 创建一个独立的执行sql语句的方法,传入sql语句,就执行sql语句 */
     47 -(void)execSql:(NSString *)sql {
     48     
     49     char *errmsg; //错误信息
     50     
     51     if (sqlite3_exec(ppDb, [sql UTF8String], NULL, NULL, &errmsg) != SQLITE_OK) {
     52         sqlite3_close(ppDb);
     53         NSLog(@"数据库操作数据失败!");
     54     }
     55 
     56 }
     57 
     58 /** 打开数据库(如果没有就会新建一个) */
     59 - (void)open {
     60     
     61     //操作代码(sql)用来创建表格,注意要转换为c的字符串,结束处有 ; 符号
     62     NSString *sql = @"create table if not exists personinfo (id integer primary key autoincrement,name text, age integer, address text);";
     63     
     64     if (sqlite3_open([FileName UTF8String], &ppDb) == SQLITE_OK) {
     65         
     66         char *errmsg; //错误信息
     67         
     68         //建表
     69         sqlite3_exec(ppDb, [sql UTF8String], NULL, NULL, &errmsg);
     70         if (errmsg) {
     71             NSLog(@"建表失败 -- %s",errmsg);
     72         }
     73         
     74     }else {
     75         NSLog(@"打开数据库失败!");
     76     }
     77     
     78 }
     79 
     80 /** 增 */
     81 - (IBAction)insert {
     82     
     83     NSString *sql1 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values('%@', '%@', '%@');", @"赵一",  @"20",  @"北京"];
     84     NSString *sql2 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values('%@', '%@', '%@');", @"钱二",  @"22",  @"上海"];
     85     NSString *sql3 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values('%@', '%@', '%@');", @"张三",  @"24",  @"广州"];
     86     NSString *sql4 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values('%@', '%@', '%@');", @"李四",  @"23",  @"深圳"];
     87     NSString *sql5 = [NSString stringWithFormat:@"insert into personinfo (name, age, address) values('%@', '%@', '%@');", @"刘五",  @"26",  @"北京"];
     88 
     89     [self execSql:sql1];
     90     [self execSql:sql2];
     91     [self execSql:sql3];
     92     [self execSql:sql4];
     93     [self execSql:sql5];
     94     
     95 }
     96 
     97 /** 删 */
     98 - (IBAction)delete {
     99     
    100     //删除id 大于1 且 小于4 的数据
    101     NSString *sql = @"delete from personinfo where id > 1 and id < 4;";
    102     [self execSql:sql];
    103     
    104 }
    105 
    106 /** 改 */
    107 - (IBAction)update {
    108     
    109     //这里把id为“1”的”name”更改为 “Hello World”
    110     NSString *sql = @"update personinfo set name = 'Hello World' where id = 1;";
    111     [self execSql:sql];
    112     
    113 }
    114 
    115 /** 查 */
    116 - (IBAction)select {
    117     
    118     //打开数据库
    119     [self open];
    120     
    121     //查询所有信息
    122 //    NSString *sql = @"select * from personinfo;";
    123     //按条件查询
    124 //    NSString *sql = @"select * from personinfo where age > 21 and age < 23;";
    125 //    NSString *sql = @"select * from personinfo where age between 20 and 22;";
    126 //    NSString *sql = @"select * from personinfo where address in ('北京', '深圳');";
    127     NSString *sql = @"select * from personinfo where address in ('北京', '深圳') and age between 23 and 26;";
    128     
    129     //查询的句柄,游标
    130     sqlite3_stmt *stmt;
    131     
    132     if (sqlite3_prepare(ppDb, [sql UTF8String], -1, &stmt, NULL) == SQLITE_OK) {
    133         
    134         //查询数据
    135         while (sqlite3_step(stmt) == SQLITE_ROW) {
    136             
    137             /** 
    138              * 获取表数据的内容
    139              * sqlite3_column_text('句柄',字段索引值。为char类型)
    140              * sqlite3_column_int(int类型)
    141              */
    142             
    143             NSString *name    = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 1) encoding:NSUTF8StringEncoding];
    144             int age           = sqlite3_column_int(stmt, 2);
    145             NSString *address = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 3) encoding:NSUTF8StringEncoding];
    146             
    147             NSLog(@"name:%@, age:%d, address:%@", name, age, address);
    148             
    149         }
    150         
    151     }
    152     
    153 }
    154 
    155 @end

    3、用Xcode运行代码,会产生一个"personinfo.sqlite"的文件,根据路径找到这个文件:

    4、用SQLiteManager工具打开"personinfo.sqlite"(没有安装就自己去网上下载)

    现在我们可以看到表格已经创建好了。

     

    5、在模拟器点击调用“增”的方法之后,再在SQLiteManager工具菜单点击左上角“Data”,再点击“personinfo”:

    我们终于可以看到数据了。

    6、其他的代码注释的都很清楚,按照方法做就行了。 

    sqlite3 语句总结

    一、

    sqlite3长用于 轻量级的 数据存储,象单片机这一类,但是现在的sqlite3,已经很先进,不能小看

    二、

    sqlite3常用命令
    当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:
    #sqlite3 test.db
     
    查看数据库文件信息命令(注意命令前带字符'.'):
    sqlite>.database

    查看所有表的创建语句:
    sqlite>.schema
     
    查看指定表的创建语句:
    sqlite>.schema table_name
     
    以sql语句的形式列出表内容:
    sqlite>.dump table_name
     
    设置显示信息的分隔符:
    sqlite>.separator symble
    Example:设置显示信息以‘:’分隔
    sqlite>.separator :
     
    设置显示模式:
    sqlite>.mode mode_name
    Example:默认为list,设置为column,其他模式可通过.help查看mode相关内容
    sqlite>.mode column
     
    输出帮助信息:
    sqlite>.help
     
    设置每一列的显示宽度:
    sqlite>.width width_value
    Example:设置宽度为2
    sqlite>.width 2
     
    列出当前显示格式的配置:
    sqlite>.show
     
    退出sqlite终端命令:
    sqlite>.quit

    sqlite>.exit
     
    3、sqlite3指令
    sql的指令格式:所有sql指令都是以分号(;)结尾,两个减号(--)则表示注释。
    如:
    sqlite>create studen_table(Stu_no interger PRIMARY KEY, Name text NOT NULL, Id interger UNIQUE, Age interger CHECK(Age>6), School text DEFAULT 'xx小学);
    该语句创建一个记录学生信息的数据表。
     
    3.1 sqlite3存储数据的类型
    NULL:标识一个NULL值
    INTERGER:整数类型
    REAL:浮点数
    TEXT:字符串
    BLOB:二进制数

    3.2 sqlite3存储数据的约束条件
    Sqlite常用约束条件如下:
    PRIMARY KEY - 主键:
    1)主键的值必须唯一,用于标识每一条记录,如学生的学号
    2)主键同时也是一个索引,通过主键查找记录速度较快
    3)主键如果是整数类型,该列的值可以自动增长
    NOT NULL - 非空:
    约束列记录不能为空,否则报错
    UNIQUE - 唯一:
    除主键外,约束其他列的数据的值唯一
    CHECK - 条件检查:
    约束该列的值必须符合条件才可存入
    DEFAULT - 默认值:
    列数据中的值基本都是一样的,这样的字段列可设为默认值

    3.3 sqlite3常用指令
    1)建立数据表
    create table table_name(field1 type1, field2 type1, ...);
    table_name是要创建数据表名称,fieldx是数据表内字段名称,typex则是字段类型。
    例,建立一个简单的学生信息表,它包含学号与姓名等学生信息:
    create table student_info(stu_no interger primary key, name text);


     create table if not exists 表名(字段名1,字段名2...);  

     
    2)添加数据记录
    insert into table_name(field1, field2, ...) values(val1, val2, ...);
    valx为需要存入字段的值。
    例,往学生信息表添加数据:
    Insert into student_info(stu_no, name) values(0001, alex);
     
    3)修改数据记录
    update table_name set field1=val1, field2=val2 where expression;
    where是sql语句中用于条件判断的命令,expression为判断表达式
    例,修改学生信息表学号为0001的数据记录:
    update student_info set stu_no=0001, name=hence where stu_no=0001;
     
    4)删除数据记录
    delete from table_name [where expression];
    不加判断条件则清空表所有数据记录。
    例,删除学生信息表学号为0001的数据记录:
    delete from student_info where stu_no=0001;
     
    5)查询数据记录
    select指令基本格式:
    select columns from table_name [where expression];
    a查询输出所有数据记录
    select * from table_name;
    b限制输出数据记录数量
    select * from table_name limit val;
    c升序输出数据记录
    select * from table_name order by field asc;
    d降序输出数据记录
    select * from table_name order by field desc;
    e条件查询
    select * from table_name where expression;
    select * from table_name where field in ('val1', 'val2', 'val3');
    select * from table_name where field between val1 and val2;
    f查询记录数目
    select count (*) from table_name;
    g区分列数据
    select distinct field from table_name;
    有一些字段的值可能会重复出现,distinct去掉重复项,将列中各字段值单个列出。
     
    6)建立索引
    当说数据表存在大量记录,索引有助于加快查找数据表速度。
    create index index_name on table_name(field);
    例,针对学生表stu_no字段,建立一个索引:
    create index student_index on student_table(stu_no);
    建立完成后,sqlite3在对该字段查询时,会自动使用该索引。
     
    7)删除数据表或索引
    drop table table_name;
    drop index index_name;

  • 相关阅读:
    NMON记录服务器各项性能数据
    性能测试基础知识
    Jmeter——小性能用例
    POSTMAN——环境变量
    Jmeter——分布式并发
    Linux-Ps命令使用
    Linux目录结构和常用命令
    Linux复制和移动文件
    Linux目录结构
    Linux-获得命令帮助man
  • 原文地址:https://www.cnblogs.com/pengyunjing/p/5903681.html
Copyright © 2011-2022 走看看