1.Sqlite数据类型:NULL. 空值、INTEGER. 整型、REAL.浮点型、TEXT.文本类型、BLOB. 二进制类型,用来存储文件,比如图片
2.使用sqlite3需要先导入libsqlite3.dylib并导入主头文件 3. 设置数据库文件存放路径,如沙盒的Doucuments文件夹内NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
_dbPath = [path stringByAppendingPathComponent:@"person.sqlite"];
4.打开数据库文件: sqlite3_open([_dbPath UTF8String], &_db);//第一个参数代表数据库文件的路径,第二个是sqlite对象,注意,此方法返回值为0时,代表打开成功 5.创建数据库表 const char *createSQL = "CREATE TABLE IF NOT EXISTS PEOPLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, name Text, pwd TEXT)";//创建表的sql语句sqlite3_exec(_db, createSQL, NULL, NULL, NULL);//执行建表语句 6.插入数据NSString *sql = [NSString stringWithFormat:@"INSERT OR REPLACE INTO PEOPLE (name,pwd) VALUES('aa','bb')"];//sql语句sqlite3_exec(_db, [sql UTF8String], NULL, NULL, NULL);//执行操作,注意,sqlite是基于c语音的,所以sql语句需要是C语言中的字符串,如果不是,则需要自己转换 7.删除操作:NSString *sql = [NSString stringWithFormat:@"delete from PEOPLE where id=%d",1];//sql语句sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL); 8.更新数据:NSString *sql = [NSString stringWithFormat:@"update PEOPLE set name = '%@' where id=2",@"小黄"];//sql语句sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);//执行sql语句 9.查询数据库NSString *sql = @"SELECT * FROM PEOPLE";//sql语句sqlite3_prepare_v2检查sql的合法性sqlite3_step逐行获取查询结果sqlite3_coloum_xxx获取对应类型的内容sqlite3_stmt *stmt = NULL;//用于保存编译好的sql语句//判断查询语句是否合法if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) { while (SQLITE_ROW == sqlite3_step(stmt)) { //获取数据,第一个参数为执行语句,第二个参数代表每一行的第几列 const unsigned char *name = sqlite3_column_text(stmt, 1); //转换成OC字符串 NSString *str = [NSString stringWithUTF8String:(const char *)name];}} 10.sqlite3_close(_db);//关闭数据库
下面是一个小小的例子:(借用火狐浏览器)
1.点击头文件。如图-1所示:
图-1
2.找到Linked Framewks and Libraries,点击"+"号,出现如图-3所示:
图-2
3.出现图-3,在search中查找sqlite.3
图-3
#import "ViewController.h"#import//导入数据库的头文件@interface ViewController (){ sqlite3 *_db;}@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //一般会把数据库文件放入沙盒,所以需要先设定存放路径 NSString *_dbpath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/MySql.sqlite"]; //sqlite3_open方法,打开数据库文件,第一个参数代表数据库文件的路径,注意需要调用UTF8String方法将NSString转换成C的字符串格式,第二个参数代表数据库对象,该方法如果返回0(SQLITE_OK),代表数据库打开成功,如果该路径没有数据库文件,则先创建再打开,否则直接打开 int a = sqlite3_open([_dbpath UTF8String], &_db); NSLog(@"%d",a); //创建数据库表 //数据库表创建语句:create table if not exist(如果表不存在) Student(表名,自己定义)(该括号要保存的信息:字段名 字段格式 ,多个字段之间用逗号隔开) NSString *s=@"create table if not exists Student(name TEXT,age INTEGER)";//如果数据库中没有Student表,则创建该表,包含字符串形式的name和整形的age //执行数据库语句:第一个参数代表执行的数据库对象,也就是打开的数据库,第二个参数代表执行语句,后面三个直接给NULL即可 sqlite3_exec(_db,[s UTF8String], NULL, NULL, NULL); //数据库增加数据 //sql插入语句:insert into Student(表名) (要进行保存的字段名,名字之间用逗号隔开) values(要保存的实际数据,多个数据用逗号隔开,注意:此处数据要与前面的字段名保持一致,且如果是TEXT类型,需要用单引号引起来) NSString *insertSql=@"insert into Student(name,age) values('江帅',21)"; //执行插入语句 sqlite3_exec(_db,[insertSql UTF8String], NULL, NULL, NULL); NSString *insertSql1=@"insert into Student(name,age) values('刘春雷',22)"; //执行插入语句 sqlite3_exec(_db,[insertSql1 UTF8String], NULL, NULL, NULL); NSString *insertSql2=@"insert into Student(name,age) values('丁云翔',25) "; //执行插入语句 sqlite3_exec(_db,[insertSql2 UTF8String], NULL, NULL, NULL); //删除操作 //sql删除语句:delete(关键字) from Student(表名)where(条件关键字)name(字段名)=''(要删除数据的条件,如果是TEXT,用单引号引起来) NSString *deSql=@"delete from Student where name= '丁云翔'"; sqlite3_exec(_db, [deSql UTF8String], NULL, NULL, NULL); //全部删除 // NSString *delAll=@"delete from Student"; //sqlite3_exec(_db, [delAll UTF8String], NULL, NULL, NULL); //该(更新) //sql更新语句:update(关键字)Student(表名)set(关键字 赋值)age(字段名)=25(要更改的值,如果要更改多个字段,则用逗号隔开)where(条件关键字)rowid(字段名)= 6(条件) NSString *updateSql=@"update Student set age = 25,name = '刘春雷' where rowid = 6"; sqlite3_exec(_db, [updateSql UTF8String], NULL, NULL, NULL); //查询 //查询语句 //查询所有:select(关键字)*from Student(表名) NSString *querySql=@"select * from Student"; sqlite3_stmt *_stmt=nil;//用于存放查询结果 int res1=sqlite3_prepare(_db, [querySql UTF8String], -1, &_stmt, NULL);//检查sql语句的合法性,如果合法则直接运行,返回结果为0 if (res1==0) { //便利结果集_stmt如果sqlite3_step返回100,代表有查询结果,先取出第一条,然后再指向下一条,直到sqlite3_step返回101,代表遍历结束 while (SQLITE_ROW ==sqlite3_step(_stmt)) { //取出单行结果中的某一列,从0开始 const unsigned char *s = sqlite3_column_text(_stmt, 0); //将查询结果转换成oc字符串 NSString *name = [NSString stringWithUTF8String:(const char *)s]; NSLog(@"结果:%@",name); } } //查询符合条件的结果 NSString *querySql1 = @"select * from Student where age < 23"; sqlite3_stmt *_stmt1 = nil;//用于存放查询结果 int res2 = sqlite3_prepare(_db, [querySql1 UTF8String], -1, &_stmt1, NULL);//检查sql语句的合法性,如果合法则直接运行,返回结果为0 if (res2 == 0) { //遍历结果集_stmt,如果sqlite3_step返回100,代表有查询结果,先取出第一条,然后再指向下一条,直到sqlite3_step返回101,代表遍历结束 while (SQLITE_ROW == sqlite3_step(_stmt1)) { //取出单行结果中的某一列,从0开始 const unsigned char *s = sqlite3_column_text(_stmt1, 0); //将查询结果转换成oc字符串 NSString *name = [NSString stringWithUTF8String:(const char *)s]; NSLog(@"--结果:%@",name); } } sqlite3_close(_db);//关闭数据库 NSLog(@"%@",_dbpath); }