iPhone编程实例—数据操作之sqlite3

iPhone编程实例—数据操作之sqlite3

在iOS中提供了SQLite的支持,这样可以通过对Sqlite的使用,实现数据的存储和管理。


处理数据库是常用操作,查找资料理解了一些对sqlite3的简单操作,记录下来,方便自己查看。
首先要导入framework,最基本的,不过也容易忘记。初次尝试使用时,就是忘了导入,还调试了好长时间,汗。。。
在AppDelegate中拷入sqlite文件:


    - (void)initSys
    {
        NSUserDefaults *udf = [NSUserDefaults standardUserDefaults];
        //只在程序首次运行时运行
        if (![udf boolForKey:@"hasdatabase"]) {
            //拷贝sqlite文件
            ....
            //记录文件已存在
            [udf setBool:YES forKey:@"hasdatabase"];
        }
    }




调用即可:


    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOption:
              (NSDictionary *)launchOptions
    {
        ...
        [self initSys];
        ...
    }


简要说明一下SQLite数据库执行SQL语句的过程


** 调用sqlite3_prepare()将SQL语句编译为sqlite内部一个结构体(sqlite3_stmt).该结构体中包含了将要执行的的SQL语句的信息.
** 如果需要传入参数,在SQL语句中用’?'作为占位符,再调用sqlite3_bind_XXX()函数将对应的参数传入.
** 调用sqlite3_step(),这时候SQL语句才真正执行.注意该函数的返回值,SQLITE_DONE和SQLITE_ROW都是表示执行成功, 不同的是SQLITE_DONE表示没有查询结果,象UPDATE,INSERT这些SQL语句都是返回SQLITE_DONE,SELECT查询语句在 查询结果不为空的时候返回SQLITE_ROW,在查询结果为空的时候返回SQLITE_DONE.
** 每次调用sqlite3_step()的时候,只返回一行数据,使用sqlite3_column_XXX()函数来取出这些数据.要取出全部的数据需要 反复调用sqlite3_step(). (注意, 在bind参数的时候,参数列表的index从1开始,而取出数据的时候,列的index是从0开始).
** 在SQL语句使用完了之后要调用sqlite3_finalize()来释放stmt占用的内存.该内存是在sqlite3_prepare()时分配的.
** 如果SQL语句要重复使用,可以调用sqlite3_reset()来清楚已经绑定的参数.


在这一部分里,sqlite3_prepare不是很好理解,这里有部分资料。


这里给个例子,加强理解:


    + (NSUInteger) getCount:(NSString *)sCategory state:(int)iState


    {


        //DB_PATH为你的数据库文件路径


        NSString *sDBPath = DB_PATH;


        sqlite3 *database;


        if (sqlite3_open([sDBPath UTF8String], &database) == SQLITE_OK) {


            NSString *sSel = @"SELECT count(*) FROM table_name WHERE sCategory=?


                 AND iState=? ORDER BY _id";


            const char *sql = [sSel UTF8String];


            NSUInteger iCount = 0;


            sqlite3_stmt *statement;


            if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {


                sqlite3_bind_text(statement, 1, [sCategory UTF8String], -1, NULL);


                sqlite3_bind_int(statement, 2, iState);


                while (sqlite3_step(statement) == SQLITE_ROW) {


                    iCount = (int)sqlite3_column_int(statement, 0);


                }


            }


            sqlite3_finalize(statement);


        }


        else


        {


            sqlite3_close(database);


            database = NULL;


            NSAssert1(0, @"Failed to open database with message '%s', sqlite3_errmsg(database));


        }


        return iCount;


    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值