分享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);