zoukankan      html  css  js  c++  java
  • 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);

      

      

  • 相关阅读:
    什么是蓝绿部署和滚动部署
    北漂--我的2018
    辛苦俩月总结的面试题,掌握它怼翻面试官不是梦~
    记一次项目谈判的失败经历,要拒绝免费开发!
    程序员技术入股的那些坑
    记一次程序员在办公室里的“撕逼”经历
    公司来了个“奇葩”的程序员
    苦逼程序员如何在公司生存的经验分享
    (第二部)程序员逆天改命之胜天半子
    别闹了,颠覆世界不是为了让它变得更糟
  • 原文地址:https://www.cnblogs.com/huyp/p/5139946.html
Copyright © 2011-2022 走看看