iOS SQLite语法基础

  分享SQLite语句的基础知识,是很基础的部分,只涉及"增","删","改","查"4个语法.不涉及表链接等内容.以后我会更新表链接的随笔.

  github上有一个SQL的Demo,包含增删改查. UI如图: url: --- > https://github.com/huyp/SQLite3_Demo.git

  使用SQLite,首先要手动导入libsqlite3.tbd库. 点击工程 ---- Build Phases ---- Link Binary With Libraries  点击 + 号,输入libsqlite3. 你会发现两个库libsqlite3.tbd 和 libsqlite3.0.tbd ,导入其中任意一个即可. 这两个库有什么区别呢? 你可以把 libsqlite3.0.tbd 看做是一个快捷方式, libsqlite3.tbd 是真正的库. 

  使用SQLite之前,你需要先了解一些SQL语句.这里就写一些简单的语句,详细的语法还要认真学习才能掌握.

  SQLite使用的是C语言.iOS开发要转成char类型

  使用前,导入sqlite3头文件,定义一个数据库

 1 #import <sqlite3.h>
 2 
 3 @interface ViewController ()
 4 
 5 @property (assign,nonatomic)sqlite3 * database;
 6 
 7 @end
 8 
 9 @implementation ViewController
10 
11 @synthesize database;

  创建一个学生表格,表格中有ID,name,age三个属性,ID是主键.

  创建表格 : create table if not exists t_student (id integer primary key autoincrement, name text, age integer)"

  create table : 创建一个表格.  if not exists : 如果没有被创建过.  t_student : 表格名字. id integer : ID integer类型(整数). primary key : 主键. autoincreament : 自动+1.  name text : name 类型(字符串)  age integer类型(整数). 

 1     //把文本框转换成C语言
 2     const char * name = [_text1.text UTF8String];//名字
 3     const char * age = [_text2.text UTF8String];//年龄
 4     //增加一行语句
 5     char * sql = "insert into t_student (name, age) values (?,?)";
 6     /**
 7      sqlite 操作二进制数据需要用一个辅助的数据类型:sqlite3_stmt * 。
 8      这个数据类型 记录了一个“sql语句”。为什么我把 “sql语句” 用双引号引起来?因为你可以把 sqlite3_stmt * 所表示的内容看成是 sql语句,但是实际上它不是我们所熟知的sql语句。它是一个已经把sql语句解析了的、用sqlite自己标记记录的内部数据结构。
 9      */
10     sqlite3_stmt * stmt;
11     
12     //这里要执行sqlite语句了 (数据库,SQL语句,-1,&stmt,NULL); 增删改查都是用这一句代码
13     //不同的地方就是sql语句的不同,sqlite3_bind_text()中的值不同而已.
14     int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);
15     if (result == SQLITE_OK) {
16         sqlite3_bind_text(stmt, 1, name, -1, NULL);
17         sqlite3_bind_text(stmt, 2, age, -1, NULL);
18     }
19     else {
20         NSLog(@"准备失败");
21     }
22     //检验是否操作完成
23     if (sqlite3_step(stmt) == SQLITE_DONE) {
24         NSLog(@"操作完成");
25     }
26     else {
27         NSLog(@"操作失败");
28     }
29     //每次调用sqlite3_prepare 函数sqlite 会重新开辟sqlite3_stmt空间,
30     //所以在使用同一个sqlite3_stmt 指针再次调用sqlite3_prepare 前
31     //需要调用sqlite3_finalize先释放空间
32     sqlite3_finalize(stmt);

  向数据库中插入对象: insert into t_student (name, age) values (?,?)

  insert into t_student : 向表t_student中插入数据.  (name, age) : 数据名.  values (?,?) : 值(值1,值2).

 1  //把文本框转换成C语言
 2     const char * name = "张三";//名字
 3     const char * age = "20";//年龄
 4     //增加一行语句
 5     char * sql = "insert into t_student (name, age) values (?,?)";
 6     sqlite3_stmt * stmt;
 7     int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);
 8     if (result == SQLITE_OK) {
 9         sqlite3_bind_text(stmt, 1, name, -1, NULL);
10         sqlite3_bind_text(stmt, 2, age, -1, NULL);
11     }
12     else {
13         NSLog(@"准备失败");
14     }
15     //检验是否操作完成
16     if (sqlite3_step(stmt) == SQLITE_DONE) {
17         NSLog(@"操作完成");
18     }
19     else {
20         NSLog(@"操作失败");
21     }
22     //每次调用sqlite3_prepare 函数sqlite 会重新开辟sqlite3_stmt空间,
23     //所以在使用同一个sqlite3_stmt 指针再次调用sqlite3_prepare 前
24     //需要调用sqlite3_finalize先释放空间
25     sqlite3_finalize(stmt);

  删除数据库中的对象 : delete from t_student where id = ?

  delete from t_sudent : 删除t_student表格中的   删除id = ? 的数据 .

 1     int a = [_text1.text intValue];
 2     sqlite3_stmt * stmt;
 3     char * sql = "delete from t_student where id = ?";
 4     int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL);
 5     if (result == SQLITE_OK) {
 6         result = sqlite3_bind_int(stmt, 1, a);
 7         if (result == SQLITE_OK) {
 8             result = sqlite3_step(stmt);
 9             if (result == SQLITE_DONE) {
10                 NSLog(@"删除成功");
11             }
12             else {
13                 NSLog(@"删除失败");
14             }
15         }
16     }
17     else {
18         NSLog(@"删除失败");
19     }
20     
21     sqlite3_finalize(stmt);

  

  更改数据 :  update t_student set name = ? where id = ?

  update t_student : 更新表格.  set name = : 设置名字为.  id = 多少的数据.

  就是修改id = ? 的名字.

 1    const char * ID = [_text1.text UTF8String];
 2     const char * newname = [_text2.text UTF8String];
 3     sqlite3_stmt * stmt;
 4     char * sql = "update t_student set name = ? where id = ?";
 5     int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL);
 6     if (result == SQLITE_OK) {
 7         result = sqlite3_bind_text(stmt, 1, newname, -1, NULL);
 8         result = sqlite3_bind_text(stmt, 2, ID, -1, NULL);
 9         if (result != SQLITE_OK) {
10             NSLog(@"更新数据有问题");
11         }
12         if (sqlite3_step(stmt) != SQLITE_DONE) {
13             NSLog(@"更新数据不成功");
14         }
15     }
16     else {
17         NSLog(@"修改数据失败");
18     }
19     sqlite3_finalize(stmt);

  查询数据库中的所有数据  select id , name , age from t_student

  select : 查询.   id,name,age  : ID,名字,年龄 这三个属性.   from t_student : 从t_student这个表格中 

 1 char * sql = "select id , name , age from t_student";
 2     sqlite3_stmt * stmt;
 3     int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL);
 4     if (result == SQLITE_OK) {
 5         //sqlite3_step(stmt) == SQLITE_ROW 查询时使用
 6         while (sqlite3_step(stmt) == SQLITE_ROW) {
 7             int ID = sqlite3_column_int(stmt, 0);
 8             char * name = (char *)sqlite3_column_text(stmt, 1);
 9             NSString * strName = [NSString stringWithUTF8String:name];
10             int age = sqlite3_column_int(stmt, 2);
11             NSLog(@"%d,%@,%d",ID,strName,age);
12         }
13     }
14     sqlite3_finalize(stmt);

  

  

原文地址:https://www.cnblogs.com/huyp/p/5139946.html