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 }

 

posted @ 2015-11-30 09:50  刘冠  阅读(260)  评论(0编辑  收藏  举报