sqlite

 1 #import "ViewController.h"
 2 #import <sqlite3.h>//导入数据库头文件
 3 
 4 @interface ViewController ()  5 {  6     sqlite3 *db;  7 }  8 @end
 9 
10 @implementation ViewController 11 
12 - (void)viewDidLoad { 13  [super viewDidLoad]; 14     /*
15  1、 Sqlite数据类型:NULL. 空值、INTEGER. 整型、REAL.浮点型、TEXT.文本类型、BLOB. 二进制类型,用来存储文件,比如图片 16  2、 使用sqlite3需要先导入libsqlite3.dylib并导入主头文件 17  3、 设置数据库文件存放路径,如沙盒的Doucuments文件夹内 18      */
19  sqlite3_close(db); 20 //一般会把数据库文件放入沙盒,所以需要先设定存放路径
21     NSString *pathString = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject ] stringByAppendingPathComponent:@"mySql.sqlite"];
/*

SQLITE_API int SQLITE_STDCALL sqlite3_open(

  const char *filename,   /* Database filename (UTF-8) */

  sqlite3 **ppDb          /* OUT: SQLite db handle */

);

*/
22 //sqlite3_open方法,打开数据库文件,第一个参数代表数据库文件的路径,注意需要调用UTF8String方法将NSString转换成C的字符串格式,第二个参数代表数据库对象,该方法如果返回0(SQLITE_OK),代表数据库代开成功,如果该路径没有数据库文件,则先创建再打开,否则直接打开
23     int res = sqlite3_open([pathString UTF8String], &db); 24 //创建数据库表 25 //数据库表创建语句:create table if not exists(如果表不存在) Student(表名,自己定义) (该括好放要保存的信息:字段名 字段格式,多个字段之间用逗号隔开)
26     NSString *s = @"create table if not exists Student(name TEXT,age INTEGER)";//如果数据库中没有Student表,则创建该表,包含 字符串形式的name和整型的age 27 //执行数据库语句: 第一个参数代表执行的数据库对象,也就是打开的数据库,第二个参数代表执行语句,后面三个直接给NULL即可
28  sqlite3_exec(db, [s UTF8String], NULL, NULL, NULL);
/*

SQLITE_API int SQLITE_STDCALL sqlite3_exec(

  sqlite3*,                                  /* An open database */

  const char *sql,                           /* SQL to be evaluated */

  int (*callback)(void*,int,char**,char**),  /* Callback function */

  void *,                                    /* 1st argument to callback */

  char **errmsg                              /* Error msg written here */

);

*/
29  NSLog(@"%@******%d",pathString,res); 30 /********数据库增加数据********/
31     //sql插入语句:insert into Student(表名) (要进行保存的字段名,名字之间用逗号隔开) values(要保存的实际数据,多个数据用逗号隔开,注意:此处数据要与前面的字段名保持一致,且如果是TEXT类型,需要用单引号引起来)
32     NSString *insertSql = @"insert into Student (name,age) values('刘冠',21)"; 33     //执行插入语句
34  sqlite3_exec(db, [insertSql UTF8String], NULL, NULL, NULL); 35     
36     NSString *insertSql1 = @"insert into Student (name,age) values('王峰',23)"; 37     //执行插入语句
38  sqlite3_exec(db, [insertSql1 UTF8String], NULL, NULL, NULL); 39     
40     NSString *insertSql2 = @"insert into Student (name,age) values('李龙',19)"; 41     //执行插入语句
42  sqlite3_exec(db, [insertSql2 UTF8String], NULL, NULL, NULL); 43 /***********删除操作**********/
44     //sql删除语句: delete(关键字) from Student(表名) where(条件关键字) name(字段名) = ‘李龙’(要删除数据的条件,如果是TEXT,用单引号引起来)
45     NSString *delSql = @"delete from Student where name = '李龙'"; 46  sqlite3_exec(db, [delSql UTF8String], NULL, NULL, NULL); 47     //全部删除 48 // NSString *delAll = @"delete from Student"; 49 // sqlite3_exec(db, [delAll UTF8String], NULL, NULL, NULL); 50     //改(更新) 51     //sql更新语句:update(关键字) Student(表名) set(关键字,赋值) age(字段名) = 25(要更改的值,如果要更新多个字段,则用逗号隔开) where(条件关键字) rowid(字段名) = 2(要改的行,从1开始)
52     NSString *updateSql = @"update Student set age = 25, name = '刘冠冠' where rowid = 2"; 53  sqlite3_exec(db, [updateSql UTF8String], NULL, NULL, NULL); 54 //    //查询 55 //    //查询语句 56 //    //查询所有:select(关键字) * from Student(表名) 57 // NSString *querySql = @"select * from Student"; 58 // sqlite3_stmt *_stmt = nil;//用于存放查询结果 59 // int rest1 = sqlite3_prepare(db, [querySql UTF8String], -1, &_stmt, NULL);//检查sql语句的合法性,如果合法则直接运行,返回结果为0
/*

SQLITE_API int SQLITE_STDCALL sqlite3_prepare(

  sqlite3 *db,            /* Database handle */

  const char *zSql,       /* SQL statement, UTF-8 encoded */

  int nByte,              /* Maximum length of zSql in bytes. */

  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */

  const char **pzTail     /* OUT: Pointer to unused portion of zSql */

);

*/ 60 // if(rest1 == SQLITE_OK) 61 // { 62 //         //遍历结果集_stmt,如果sqlite3_step返回100,代表有查询结果,先取出第一条,然后再指向下一条,直到sqlite3_step返回101,代表遍历结束
//
SQLITE_API int SQLITE_STDCALL sqlite3_step(sqlite3_stmt*);
63 // while (SQLITE_ROW == sqlite3_step(_stmt)) { 64 //            //取出单行结果中的某一列,从0开始 65 // const unsigned char *s = sqlite3_column_text(_stmt, 0);
//
SQLITE_API const unsigned char *SQLITE_STDCALL sqlite3_column_text(sqlite3_stmt*, int iCol);column纵列

SQLITE_API const void *SQLITE_STDCALL sqlite3_column_blob(sqlite3_stmt*, int iCol);

SQLITE_API int SQLITE_STDCALL sqlite3_column_bytes(sqlite3_stmt*, int iCol);

SQLITE_API int SQLITE_STDCALL sqlite3_column_bytes16(sqlite3_stmt*, int iCol);

SQLITE_API double SQLITE_STDCALL sqlite3_column_double(sqlite3_stmt*, int iCol);

SQLITE_API int SQLITE_STDCALL sqlite3_column_int(sqlite3_stmt*, int iCol);

SQLITE_API sqlite3_int64 SQLITE_STDCALL sqlite3_column_int64(sqlite3_stmt*, int iCol);

SQLITE_API const unsigned char *SQLITE_STDCALL sqlite3_column_text(sqlite3_stmt*, int iCol);

SQLITE_API const void *SQLITE_STDCALL sqlite3_column_text16(sqlite3_stmt*, int iCol);

SQLITE_API int SQLITE_STDCALL sqlite3_column_type(sqlite3_stmt*, int iCol);

SQLITE_API sqlite3_value *SQLITE_STDCALL sqlite3_column_value(sqlite3_stmt*, int iCol);

66 //            //将查询结果转换成oc字符串 67 // NSString *name = [NSString stringWithUTF8String:(const char *)s]; 68 // NSLog(@"结果:%@",name); 69 // } 70 // } 71     //查询符合条件的结果
72     NSString *querySql1 = @"select * from Student where age < 23"; 73     sqlite3_stmt *_stmt1 = nil;//用于存放查询结果
//推荐在现在任何的程序中都使用sqlite3_prepare_v2这个函数,sqlite3_prepare只是用于前向兼容
74 int res2 = sqlite3_prepare(db, [querySql1 UTF8String], -1, &_stmt1, NULL);//检查sql语句的合法性,如果合法则直接运行,返回结果为0 75 if (res2 == 0) { 76 //遍历结果集_stmt,如果sqlite3_step返回100,代表有查询结果,先取出第一条,然后再指向下一条,直到sqlite3_step返回101,代表遍历结束 77 while (SQLITE_ROW == sqlite3_step(_stmt1)) { 78 //取出单行结果中的某一列,从0开始 79 const unsigned char *s = sqlite3_column_text(_stmt1, 0); 80 //将查询结果转换成oc字符串 81 NSString *name = [NSString stringWithUTF8String:(const char *)s]; 82 83 NSLog(@"--结果:%@",name); 84 } 85 } 86 sqlite3_close(db);//关闭数据库 87 88 }

 

    原文作者:sqlite
    原文地址: https://www.cnblogs.com/liuguan/p/5006355.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞