IOS-sqlite3

一.数据库基本知识

 1.表-table  

   字段-属性-列-column

   纪录-行-row

 2.基本类型

   integer:整型

   real:浮点型

   text:文本字符串

   blob:二进制数据

   sqlite可以设定为无类型参数。

 3.SQL数据库不分大小写

二.SQL语句

   结构化查询语言,是对关系型数据库的数据进行定义和操作的语言(增删改查,CRUD)。

    1.数据库定义语句:DDL(Data Definition Language)

        包括createdrop等操作(创建和删除)

    CREAT TABLE IF NOT EXISTS  表名(字段1 字段类型,字段名称2 字段类型,...);

           例如:CREAT TABLE IF NOT EXISTS t_student(name text,age integer);

    DROP TABLE IF EXISTS 表名

    例如:DROP TABLE IF ESISTS t_student    

    2.数据库操作语句:DML(Data Manipulation Language)

        包括insertupdate,delete等操作(添加,修改,删除)

     INSERT INTO 表名(字段1,字段2,...)values(字段1的值,字段2的值,...);

    例如:INSERT INTO t_shop(name,price,left_count)VALUES('one',100.1,500);

     UPDATA 表名 SET 字段1 = 字段1的值,字段2 = 字段2的值,...;

    例如:UPDATA t_student SET name = 'bob',age =25;//这里会把全部都改了

     DELETE FROM 表名;

    例如:DELETE FROM t_student;WHERE ...

    3.数据库查询语句:DQL(Data Query Language)

        可用于查询获得表中的数据,关键字select

        其他常用关键字有where,order by,group byhaving

    排序: SELECT * FROM t_student ORDER BY age ASC/DESC(升序/降序);

    limit:select * from 表名 limit 数值1,数值2;//跳过前面的数值1条,查找后面的数值2条

  4.约束

   主键(primary key):用来唯一表示某一条记录,可以是多个

      creat table if not exists t_student (id integer primary key , name text, age integer);//可以自增长

     外键约束:利用外键可以建立表与表的关系,外键一般加在多的表。

    create table t_student(id interger primary key autoincrement,name text,age integer, class_id interger,constraint    "fk_student_rel_class" FOREIGN KEY("class") REFERENCE "t_class"("id"))

   其他约束:

    字段 not null   ,不能为空

    字段 uinque   ,不能重复

    字段 default   ,默认为

    CREAT TABLE IF NOT EXISTS  表名(字段1 字段类型 not null uinque,字段名称2 字段类型,...);

 三.sqlite3具体应用

  1.创建数据库和表

  @property(nonatomic, assign) sqlite3 *db;

  //打开数据库 

  NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"mydb.db"];

  

  int tem =  sqlite3_open(filename.UTF8String, &_db);

  if(tem == SQLITE_OK)

  {

     //创建表格

    const char *sql = "create table if not exists t_student (id integer primary key,name text not null ,age integer)";

    char *errmsg = NULL;

    //第二个参数是数据库操作语句

    sqlite3_exec(self.db, sql, NULL, NULL, &errmsg)

    if(errmsg){NSLog(@"创表失败%s",errmsg);}

  }else{

    NSLog(@"打开失败");

  }

  2.插入数据

   NSString *sql = "INSERT INTO t_student(name,age)VALES('bob',25)";

     sqlite3_exec(self.db,sql.UTF8String,NULL,NULL,NULL);

  3.查询数据

   NSString *sql = "select * from t_student";

    //取出查询结果

     sqlite3_stmt *stmt = NULL;

     int tem = sqlite3_prepare_v2(self.db,sql.UTF8String,-1,&stmt,NULL);

   if(tem == SQLITE_OK)

     {

     where(sqlite3_setp(stmt) == SQLITE_ROW){//成功取出一条数据

       const unsigned char *name = sqlite3_column_text(stmt,0);//取出第0数据

       NSLog(@"%@",[NSString stringWithUTF8String:name]);     

     }

   }

  关闭数据库

  sqlite3_close()

  

   

    

原文地址:https://www.cnblogs.com/zhouwenbo/p/4450997.html