【iOS开发】---- SQLite3(附Demo)

【iOS开发】---- SQLite3(附Demo),第1张

概述       先上源码:SQLite3源码。        SQLite3在存储和检索大量数据方面非常有效。它还能进行复杂的聚合,与使用对象执行这些 *** 作相比,获得结果的速度更快。        关于"SQLite"的发音,大多数正式文档将其读为“Ess-Queue-Ell-Light”。        下面我们开始新建一个工程:SQLite3Demo。工程目录如下:        在访问SQLit

先上源码SQLite3源码

sqlite3在存储和检索大量数据方面非常有效。它还能进行复杂的聚合,与使用对象执行这些 *** 作相比,获得结果的速度更快。

关于"sqlite"的发音,大多数正式文档将其读为“Ess-Queue-Ell-light”。

下面我们开始新建一个工程:sqlite3Demo工程目录如下:

在访问sqlite3时要通过一个过程API,此API提供了很多C函数调用的接口。要使用此API,需要将应用程序链接到一个名为libsqlite3.dylib的动态库。在Xcode4.5版本,添加方法如下图所示(其它版本可百度,or谷歌):


点击上图中linked Frameworks and librarIEs下面的‘+’号,


这里注意别选错了,务必选中libsqlite3.dylib,它是始终指向最新版本的sqlite3库的别名

先把界面画好(这个很简单,就不上代码了),界面如下:


现在我们来创建一个数据库,在MyVIEwController.h中添加如下代码:

#import <UIKit/UIKit.h>#import <sqlite3.h>#define kfilename @"data.sqlite3"@interface MyVIEwController : UIVIEwController{    sqlite3 *database;}-(Nsstring *)datafilePath;@end


在.m文件中添加对应的实现代码(已添加相应的注释):

#import "MyVIEwController.h"@interface MyVIEwController ()@end@implementation MyVIEwController- (voID)vIEwDIDLoad{    [super vIEwDIDLoad];    self.vIEw.backgroundcolor = [UIcolor underPageBackgroundcolor];        //打开数据库,若不存在,则创建它,否则打开它。    if (sqlite3_open([[self datafilePath] UTF8String],&database) != sqlITE_OK)    {        sqlite3_close(database);    }}-(Nsstring *)datafilePath{    /*常量NSdocumentDirectory表明我们正在查到document目录的路径。     第二个常量NSUserDomainMask表明我们将搜索限制于我们应用程序的沙河。*/    NSArray *paths = NSSearchPathForDirectorIEsInDomains(NSdocumentDirectory,NSUserDomainMask,YES);        Nsstring *documentsDirectory = [paths objectAtIndex:0];    return [documentsDirectory stringByAppendingPathComponent:kfilename];}

可以先运行一下,然后去document目录下,可以看到名为data.sqlite3的文件,表明数据库创建成功。

然后必须要有一个容纳数据的表,创建一个表Student,Student包含了三个字段:studentID,name,achIEve.代码与注释如下:

    //创建表    char *errorMsg;    //SQL语句也可以用c来写,比如-(voID)saveData函数中的updata语句,注意比较两者的不同    //SQL语句写好后可以把语句复制到数据库中去执行一下,看看写的是否正确。    Nsstring *createsql = @"create  table if not exists Student(studentID integer primary key,name text,achIEve text)";    if (sqlite3_exec(database,[createsql UTF8String],NulL,&errorMsg) != sqlITE_OK)    {        sqlite3_close(database);        NSAssert1(0,@"error create table:%s",errorMsg);    }

每次登录以后,你需要显示保存的数据,这就需要查询数据库中的数据:

    //查询    Nsstring *query = @"select * from Student";    sqlite3_stmt *statement ;    if (sqlite3_prepare_v2(database,[query UTF8String],-1,&statement,nil) == sqlITE_OK)    {        while (sqlite3_step(statement)==sqlITE_ROW) {            //注意计数,取值从零开始            NSInteger studentID = sqlite3_column_int(statement,0);            Nsstring      *name = [self char2String:(char *)sqlite3_column_text(statement,1)] ;            Nsstring   *achIEve = [self char2String:(char *)sqlite3_column_text(statement,2)] ;                        studentIDFIEld.text = [Nsstring stringWithFormat:@"%d",studentID];            nameFIEld.text = name;            achIEvementFIEld.text = achIEve;        }      }

由于sqlite3_column_text(,)取到的值是char类型,需要做相应的转换,将char转为Nsstring类型:

-(Nsstring*)char2String:(char*)c{    Nsstring *s = (c) ? [Nsstring stringWithUTF8String:c] : @"";    return s;}


输入数据:学号20130202,姓名shenjx,成绩125,完成之后点击保存,执行以下保存动作:

-(voID)saveData{    if (sqlite3_open([[self datafilePath] UTF8String],&database) != sqlITE_OK)    {        sqlite3_close(database);        NSAssert(0,@"Failed to open database!");    }    char *errorMsg = nil;    char *update = "insert or replace into Student(studentID,name,achIEve) values(?,?,?)";    sqlite3_stmt *stmt;    if (sqlite3_prepare_v2(database,update,&stmt,nil) == sqlITE_OK)    {        //注意计数,绑定参数从1开始计数        sqlite3_bind_int(stmt,1,[studentIDFIEld.text intValue]);        sqlite3_bind_text(stmt,2,[nameFIEld.text UTF8String],NulL);        sqlite3_bind_text(stmt,3,[achIEvementFIEld.text UTF8String],NulL);    }        if (sqlite3_step(stmt) != sqlITE_DONE)    {        NSAssert1(0,errorMsg);        sqlite3_finalize(stmt);    }    sqlite3_close(database);}

任何绑定函数的第一个参数都是指向之前在 sqlite3_prepare_v2()调用中使用的sqlite3_stmt,第二个参数是绑定的变量的索引。SQL语句中第一个问号的索引是1。第三个参数表示替换问号的值。大多数绑定函数都只有三个参数,只有少数,比如绑定文本和二进制数据的函数还有另外两个参数。第一个参数是在第三个参数中传递数据的长度,对于c字符串,可以传递-1开代替字符串的长度,而函数将使用整个字符串。最后一个参数是可选的函数回调,用于在语句执行后完成内存清理工作,通常,这种函数用于使用malloc()释放已分配的内存。
好了,运行程序,可以看到数据与上次输入的一致,说明数据确实存储了:



总结

以上是内存溢出为你收集整理的【iOS开发】---- SQLite3(附Demo)全部内容,希望文章能够帮你解决【iOS开发】---- SQLite3(附Demo)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1174558.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-02
下一篇2022-06-02

发表评论

登录后才能评论

评论列表(0条)

    保存