你的位置:首页 > 操作系统

[操作系统]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 ViewController10 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);