SQlite常用语句

注:SQlite语句 不区分大小写

1.创建表语句

create table Student (Student 是表名)

IF NOT EXISTS 表不存在 才创建

gender text 表示其类型 字符串

存储类型:

NULL 值是空值

INTEGER 值是整型

REAL 值是浮点数

TEXT 值是文本字符串

BLOB 值是一个二进制类型

number integer primary key not NULL 主键值 如果不操作 自增(键值也可以是字符串)(键值 相当于唯一标识)

not NULL 值不能为空(可以不写,但是主键是必须写的)

注意:错一个字母 毁你一生

//创建表 
 create table IF NOT EXISTS lanOuStudent(number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL, imageData BLOB not NULL) 
     //  创建多张表 
     //  @"CREATE TABLE IF NOT EXISTS ActivityList (ID TEXT PRIMARY KEY not NULL, title TEXT not NULL, imageUrl TEXT not NULL, data BLOB not NULL);CREATE TABLE IF NOT EXISTS MoveList (ID TEXT PRIMARY KEY not NULL, title TEXT not NULL, imageUrl TEXT not NULL, data BLOB not NULL)"

2.插入语句

insert into lanOuStudent 表名

注:单引号 与 顺序对应

@"insert into lanOuStudent(number,name,gender,age,imageData) values(?,?,?,?,?)"

3.删除语句

delete from lanOuStudent 表名

where 根据条件删除

delete from lanOuStudent where age > '%ld'

4.更新语句

update lanOuStudent 表名

where 根据条件更新

set age 更新的字段

update lanOuStudent set age = '%ld' where name = '%@'

(根据什么来更新什么 上面语句 是根据名字 来更新 名字对应的年龄)

5.查询语句

where 根据条件查询  多条件用 and 连接

*表示 查询所有字段 
 select * from lanOuStudent where name = ? and age = ? 
 select * from lanOuStudent 查询所有 
 select name,imageData from lanOuStudent where name = ? and age = ? 
 select name,imageData 只查询这两个字段

重要函数参数:

包含两个步骤 1.准备 2.执行语句

sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg)

第1个参数  是前面open函数得到的指针。

第2个参数  是一条sql语句。

第3个参数  是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。

第4个参数  是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写法,以及这个参数的使用。

第5个参数  是错误信息。

准备语句

sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)

执行准备的绑定语句

sqlite3_step()

int nByte -1 指sql语句长度 可以无限长

sqlite3_stmt 跟随指针 地址

const char **pzTail 截取sql语句未使用部分

绑定查询值

第二个参数 指查询的第几个问号 从1开始

sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);

读取数据

第二个参数 指的是 表中的列数 从0开始

char *name = (char *)sqlite3_column_text(stmt, 1); 
 NSData *data = [NSData dataWithBytes:sqlite3_column_blob(stmt, 1) length:sqlite3_column_bytes(stmt, 1)]; 
 #define SQLITE_OK           0   /* 成功 | Successful result */ 
 /* 错误码开始 */ 
 #define SQLITE_ERROR        1   /* SQL错误 或 丢失数据库 | SQL error or missing database */ 
 #define SQLITE_INTERNAL     2   /* SQLite 内部逻辑错误 | Internal logic error in SQLite */ 
 #define SQLITE_PERM         3   /* 拒绝访问 | Access permission denied */ 
 #define SQLITE_ABORT        4   /* 回调函数请求取消操作 | Callback routine requested an abort */ 
 #define SQLITE_BUSY         5   /* 数据库文件被锁定 | The database file is locked */ 
 #define SQLITE_LOCKED       6   /* 数据库中的一个表被锁定 | A table in the database is locked */ 
 #define SQLITE_NOMEM        7   /* 某次 malloc() 函数调用失败 | A malloc() failed */ 
 #define SQLITE_READONLY     8   /* 尝试写入一个只读数据库 | Attempt to write a readonly database */ 
 #define SQLITE_INTERRUPT    9   /* 操作被 sqlite3_interupt() 函数中断 | Operation terminated by sqlite3_interrupt() */ 
 #define SQLITE_IOERR       10   /* 发生某些磁盘 I/O 错误 | Some kind of disk I/O error occurred */ 
 #define SQLITE_CORRUPT     11   /* 数据库磁盘映像不正确 | The database disk image is malformed */ 
 #define SQLITE_NOTFOUND    12   /* sqlite3_file_control() 中出现未知操作数 | Unknown opcode in sqlite3_file_control() */ 
 #define SQLITE_FULL        13   /* 因为数据库满导致插入失败 | Insertion failed because database is full */ 
 #define SQLITE_CANTOPEN    14   /* 无法打开数据库文件 | Unable to open the database file */ 
 #define SQLITE_PROTOCOL    15   /* 数据库锁定协议错误 | Database lock protocol error */ 
 #define SQLITE_EMPTY       16   /* 数据库为空 | Database is empty */ 
 #define SQLITE_SCHEMA      17   /* 数据结构发生改变 | The database schema changed */ 
 #define SQLITE_TOOBIG      18   /* 字符串或二进制数据超过大小限制 | String or BLOB exceeds size limit */ 
 #define SQLITE_CONSTRAINT  19   /* 由于约束违例而取消 | Abort due to constraint violation */ 
 #define SQLITE_MISMATCH    20   /* 数据类型不匹配 | Data type mismatch */ 
 #define SQLITE_MISUSE      21   /* 不正确的库使用 | Library used incorrectly */ 
 #define SQLITE_NOLFS       22   /* 使用了操作系统不支持的功能 | Uses OS features not supported on host */ 
 #define SQLITE_AUTH        23   /* 授权失败 | Authorization denied */ 
 #define SQLITE_FORMAT      24   /* 附加数据库格式错误 | Auxiliary database format error */ 
 #define SQLITE_RANGE       25   /* 传递给sqlite3_bind()的第二个参数超出范围 | 2nd parameter to sqlite3_bind out of range */ 
 #define SQLITE_NOTADB      26   /* 被打开的文件不是一个数据库文件 | File opened that is not a database file */ 
 #define SQLITE_ROW         100  /* sqlite3_step() 已经产生一个行结果 | sqlite3_step() has another row ready */ 
 #define SQLITE_DONE        101  /* sqlite3_step() 完成执行操作 | sqlite3_step() has finished executing */ 
 /* 错误码结束 */