iPhone开发【二十四】数据持久化总结之第4篇—sqlite3数据库

SQLite3数据库的介绍和使用(面向业务编程-数据库) SQLite是一种用C语言实现的的SQL数据库它的特点有:轻量级、快速、独立、高可靠性、跨平台它广泛应用在全世界范围内的手机电脑应用的内建数据库SQLite因为其采用文件存储,且容易移植。在嵌入式中应用非常广泛,可以说是嵌入式业务开发的必学库这次先讲一下怎么获取源码和使用数据库在业务开发中是非常常见的,而SQLite3被广泛应用在各个领域。并且由于它的小型无服务器结构并且依靠文件存储,也被广泛应用在各种嵌入式系统中所以说,了解SQLite3几乎是从事嵌入式业务开发的必选项。 阅读详情

转载请注明出处,原文网址:http://blog.youkuaiyun.com/m_changgong/article/details/8284135 作者:张燕广

实现的功能:1)演示使用sqlite3持久化数据。

关键词:数据持久化 sqlite3 数据库

1、将上一篇iPhone开发【二十二】数据持久化总结之第3篇归档(NSKeyedArchiver、NSKeyedUnarchiver)的工程拷贝一份,名称修改为Persistence-sqlite,工程结构如下:


Person类已经没用了,可以删掉。

2、为工程添加sqlite3的库libsqlite3.dylib,如下图所示:


3、主要修改了ViewController类,ViewController.h如下:

#define kFileName @"archive"
#define kDataKey @"Data"
#define kSqliteFileName @"data.db3"

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property(nonatomic,retain)IBOutlet UITextField *name;
@property(nonatomic,retain)IBOutlet UITextField *gender;
@property(nonatomic,retain)IBOutlet UITextField *age;
@property(nonatomic,retain)IBOutlet UITextField *education;

-(NSString *)dataFilePath;
-(void)applicationWillResignActive:(NSNotification *)nofication;

@end
ViewController.m如下:

#import "ViewController.h"
#import "Person.h"
#import <sqlite3.h>

@implementation ViewController
@synthesize name,gender,age,education;

-(NSString *)dataFilePath{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    //return [documentsDirectory stringByAppendingPathComponent:kFileName];
    return [documentsDirectory stringByAppendingPathComponent:kSqliteFileName];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
	// Do any additional setup after loading the view, typically from a nib.
    NSString *filePath = [self dataFilePath];
    NSLog(@"filePath=%@",filePath);
    
    if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){
        //属性列表
        /*
        NSArray *array = [[NSArray alloc]initWithContentsOfFile:filePath];
        name.text = [array objectAtIndex:0];
        gender.text = [array objectAtIndex:1];
        age.text = [array objectAtIndex:2];
        education.text = [array objectAtIndex:3];
        
        [array release];*/
        
        //归档
        /*
        NSData *data = [[NSMutableData alloc]initWithContentsOfFile:[self dataFilePath]];
        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
        Person *person = [unarchiver decodeObjectForKey:kDataKey];
        [unarchiver finishDecoding];
        
        name.text = person.name;
        gender.text = person.gender;
        age.text = person.age;
        education.text = person.education;
        
        [unarchiver release];
        [data release];*/
        
        //sqlite3
        sqlite3 *database;
        //打开数据库
        if(sqlite3_open([filePath UTF8String], &database)!=SQLITE_OK){//备注1
            //数据库打开失败,关闭数据库
            sqlite3_close(database);
            NSAssert(0,@"打开数据库失败");
        }
        
        char* errorMsg;
        NSString *createSQL = @"CREATE TABLE IF NOT EXISTS PERSON (name TEXT PRIMARY KEY,gender TEXT,age TEXT,education TEXT);";
        //创建表
        if(sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg)!=SQLITE_OK){//备注2
            //创建表失败,关闭数据库
            sqlite3_close(database);
            NSAssert1(0, @"创建表失败:%s", errorMsg);
        }
        
        //查询表
        NSString *querySQL = @"SELECT name,gender,age,education FROM PERSON ORDER BY name";

        //执行查询,遍历查询结果
        sqlite3_stmt *statment;
        if(sqlite3_prepare_v2(database, [querySQL UTF8String], -1, &statment, nil) == SQLITE_OK){//备注3
            //查询成功,执行遍历操作
            while(sqlite3_step(statment) == SQLITE_ROW){//备注4
                const char* pName = (char*)sqlite3_column_text(statment, 0);//备注5
                if(pName!=NULL){
                    self.name.text = [[NSString alloc]initWithUTF8String:pName];
                }
                
                char* pGender = (char*)sqlite3_column_text(statment, 1);
                if(pGender!=NULL){
                    self.gender.text = [[NSString alloc]initWithUTF8String:pGender];
                }
                
                char* pAge = (char*)sqlite3_column_text(statment, 2);
                if(pAge!=NULL){
                    self.age.text = [[NSString alloc]initWithUTF8String:pAge];
                }
                
                char* pEducation = (char*)sqlite3_column_text(statment, 3);
                if(pEducation!=NULL){
                   self.education.text = [[NSString alloc]initWithUTF8String:pEducation]; 
                }
            }
            sqlite3_finalize(statment);//备注6
        }
        //关闭数据库
        sqlite3_close(database);//备注7
    }
    
    UIApplication *app = [UIApplication sharedApplication];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app];
    
    [super viewDidLoad];
}

-(void)applicationWillResignActive:(NSNotification *)nofication{
    
    //属性列表
    /*
    NSMutableArray *array = [[NSMutableArray alloc]init];
    [array addObject:name.text];
    [array addObject:gender.text];
    [array addObject:age.text];
    [array addObject:education.text];
    [array writeToFile:[self dataFilePath] atomically:YES];
    [array release];*/
    
    //归档
    /*
    Person *person = [[Person alloc]init];
    person.name = name.text;
    person.gender = gender.text;
    person.age = age.text;
    person.education = education.text;
    
    NSMutableData *data = [[NSMutableData alloc]init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
    [archiver encodeObject:person forKey:kDataKey];
    [archiver finishEncoding];
    
    [data writeToFile:[self dataFilePath] atomically:YES];
    [person release];
    [archiver release];
    [data release];*/
    
    //sqlite3
    sqlite3 *database;
    //打开数据库
    if(sqlite3_open([[self dataFilePath] UTF8String], &database)!=SQLITE_OK){
        //数据库打开失败,关闭数据库
        sqlite3_close(database);
        NSAssert(0,@"打开数据库失败");
    }
    
    char* errorMsg;
    NSString *updateSQL = @"INSERT OR REPLACE INTO PERSON(name,gender,age,education) VALUES(?,?,?,?);";
    //执行插入或更新操作
    sqlite3_stmt *statment;
    if(sqlite3_prepare_v2(database, [updateSQL UTF8String], -1, &statment, nil) == SQLITE_OK){
        //绑定变量
        sqlite3_bind_text(statment, 1, [self.name.text UTF8String], -1, NULL);//备注8
        sqlite3_bind_text(statment, 2, [self.gender.text UTF8String], -1, NULL);
        sqlite3_bind_text(statment, 3, [self.age.text UTF8String], -1, NULL);
        sqlite3_bind_text(statment, 4, [self.education.text UTF8String], -1, NULL);
    }
    if(sqlite3_step(statment)!=SQLITE_DONE){
        NSAssert1(0, @"更新表失败:%s", errorMsg);
    }
    sqlite3_finalize(statment);
    //关闭数据库
    sqlite3_close(database);
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    self.name = nil;
    self.gender = nil;
    self.age = nil;
    self.education = nil;
}

-(void)dealloc{
    [name release];
    [gender release];
    [age release];
    [education release];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
	[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
	[super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end
代码解释:

备注1:sqlite3_open():打开数据库

在操作数据库之前,首先要打开数据库。

这个函数打开一个sqlite数据库文件的连接并且返回一个数据库连接对象。

第1个参数:数据文件路径必须用C风格字符串(不能用NSString),[filePath UTF8String]将filePath转换为C风格字符串。

第2个参数:是返回的数据库连接对象。

备注2:sqlite3_exec():执行SQL语句
      第1个参数:数据库指针,是前面open函数得到的指针
      第2个参数:const char *sql是一条sql 语句,以\0结尾。
      第3个参数:sqlite3_callback 是回调,当这条语句执行之后,sqlite3会调用这个回调函数。
      第4个参数:void*是一个指针,可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL
备注3:sqlite3_prepare_v2():将sql文本转换成一个准备语句(prepared statement)对象,同时返回这个对象的指针
     第1个参数:数据库指针,是前面open函数得到的指针
     第2个参数:sql语句,必须是C风格字符串
     第3个参数:如果该参数小于0,则函数取出zSql中从开始到第一个0终止符的内容;如果nByte不是负的,那么它就是这个函数能从zSql中读取的字节数的最大值。如果nBytes非负,zSql在第一次遇见’/000/或’u000’的时候终止
    第4个参数:上面提到zSql在遇见终止符或者是达到设定的nByte之后结束,假如zSql还有剩余的内容,那么这些剩余的内容被存放到pZTail中,不包括终止符
备注4:sqlite3_step()
    这个过程用于执行有前面sqlite3_prepare创建的准备语句。这个语句执行到结果的第一行可用的位置。继续前进到结果的第二行的话,只需再次调用sqlite3_setp()。继续调用sqlite3_setp()直到这个语句完成,那些不返回结果的语句(如:INSERT,UPDATE,或DELETE),sqlite3_step()只执行一次就返回
备注5:sqlite3_column_text()
    从结果集中获取各列的值,需要注意的是:第一列的索引是0。
备注6:
sqlite3_finalize()

这个过程销毁前面被sqlite3_prepare创建的准备语句,每个准备语句都必须使用这个函数去销毁以防止内存泄露。

在空指针上调用这个函数没有什么影响,同时可以在准备语句的生命周期的任一时刻调用这个函数:在语句被执行前,一次或多次调用

sqlite_reset之后,或者在sqlite3_step任何调用之后。

备注7:sqlite3_close()

          关闭前面使用sqlite3_open打开的数据库连接,任何与这个连接相关的准备语句必须在调用这个关闭函数之前被释放掉。

备注8:sqlite3_bind_text()

第1个参数:指向在sqlite3_prepare_v2()调用中使用的sqlite3_stme。

第2个参数:所绑定的变量的索引(sql语句中第一个问号的索引),需要注意的是:第一个问号的索引是1,而不是0。

第3个参数:只有少数绑定函数,比如用于绑定文本或二进制数据的绑定函数,这个参数用来设定传递数据的长度。对于C字符串,可以传递-1来代替字符串的长度,意思是要是要使用整个字符串。

第4个参数:回调函数,一般用于在语句执行后做内存清理相关的工作。可以设置为NULL。

4、数据库文件的保存位置是: /Users/duobianxing/Library/Application Support/iPhone Simulator/5.0/Applications/CC47C118-7FE7-4718-A4AA-635FBCC36AED/Documents/data.db3




iPhone开发Swift基础05 数据持久化 CoreData iOS中的数据持久化方式有4种: plist属性列表 对象归档 SQLite3 Core Data Plist plist文件主要是以键值对的方式存储属性、配置信息,也可以用于存储项目中的业务数据。我们常用的UserDefaults类其实也是用plist文件进行存储的。 解析Plist //组织plist文件地址 let configPlistPath : String = Bundle.main.path(forResource: "bomsConfig", ofType: "plist")! //通 阅读详情

相关推荐

Unity游戏开发实战:SQLite本地数据库集成与数据持久化解决方案

在游戏开发中,数据持久化是核心需求,涉及玩家进度、配置信息和本地缓存的管理。传统方法如PlayerPrefs或JSON文件在应对复杂数据结构和大数据量时,常面临性能瓶颈和可维护性挑战。数据库技术通过提供结构化存储、事务支持和高效查询,成为解决这些问题的关键。SQLite作为一款轻量级、嵌入式的关系型数据库,无需独立服务器,单个文件即可运行,非常适合Unity等游戏引擎的本地数据管理场景。其支持完整的SQL语法和ACID事务,能有效保障数据一致性,并通过索引等机制优化查询性能。在Unity中集成SQLite,

weixin_30340819的博客 398

Bitbake

什么是 BitBake 以下内容有助于理解 BitBake: 基本上,BitBake是一个Python程序,它由用户创建的配置驱动,可以为用户指定的目标执行用户创建的任务,即所谓的配方(recipes) Config、tasks 与 recipes 通过一种 BitBake 领域特定语言写 Config、tasks 与 recipes,这种语言包含变量与可执行的 shell、python 代码。所以理论上,BitBake 可以执行代码,你也可以用 BitBake 做除构建软件之外的事情,但是并不

figozzz的博客 1855

iPhone开发中使用SQLite的完整指南

以上代码使用SQL语句向"users"表中插入了一条数据,其中name为"John",age为25。如果数据插入成功,将成功,将输出"数据插入成功",否则"数据插入成功",否则输出"数据插入失败"。如果数据库创建成功,将输出"数据库创建成功",否则输出"数据库创建失败"。如果表创建成功,将输出"表创建成功",否则输出"表创建失败"。如果数据更新成功,将输出"数据更新成功",否则输出"数据更新失败"。如果数据删除成功,将输出"数据删除成功",否则输出"数据删除失败"。

CodeWWWCode的博客 465

ios存储数据的几种方式

NSInteger page; 1.Property List #define LIST_FILE_NAME @"Property.list" //Read - (void)restoreDataWithProperty { NSString *path = [self dataFilePathWithName:LIST_FILE_NAME]; if ([

Chuekup的专栏 1769

掌握iPhone应用开发中的SQLite数据库实践指南

本章节介绍了SQLite数据库文件的创建与管理的相关知识,包括创建、打开、备份和恢复数据库文件的具体步骤和注意事项。理解和掌握这些知识对于开发高质量、高可用性的应用至关重要。在实际开发过程中,我们需要根据应用的特定需求,制定合适的数据库备份策略和恢复机制,确保应用的稳定运行和数据的安全性。

weixin_33628677的博客 781

miRNA测序数据生信分析——第二讲,数据库下载整理

一个非编码RNA的整合数据库,可用来识别鉴定各种类型的ncRNA。提供的是ncRNA在基因组上的基因序列,而非转录成熟ncRNA的序列。最新版:2022-11-02Rfam数据库中ncRNA类型分三大类:Cis-reg和Gene和Intron。这三大类又有子类。一个提供包括miRNA序列数据、注释、预测基因靶标等信息的全方位数据库,是存储miRNA信息最主要的公共数据库之一。最新版:2018-12-01。

weixin_44616693的博客 4098

bitbake错误:sqlite3.OperationalError: unable to open database file

<br />[qc@fedora7 stuff]$ bitbake package<br /> Traceback (most recent call last):<br />   File "/myPart1/stuff/bitbake/bin/bitbake", line 134, in <module><br />     main()<br />   File "/myPart1/stuff/bitbake/bin/bitbake", line 114, in main<br />    

独自陶醉 3866

基于C#的机器人控制框架:如何将ROS与硬件集成

本文探讨了如何利用C#与ROS(Robot Operating System)集成开发机器人控制系统。通过ROSSharp库和rosbridge中间件,实现了C#与ROS的WebSocket通信,并展示了硬件控制模块的设计方法。文章详细介绍了电机控制的串口通信实现、ROS消息订阅机制,以及性能优化和容错处理策略,最终构建了一个智能小车控制框架的案例。这种C#与ROS的集成方案为机器人开发提供了跨平台支持,同时兼顾了系统的高效性和可靠性。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1138

嵌入式数据库:SQLite3的安装和使用说明

​SQLite函数列表:https://www.sqlite.org/c3ref/funclist.html ●创建一个数据库 ●创建一张表格 ●插入一条记录 ●查看数据库的记录 ●删除一条记录 ●更改一条记录 ●删除一张表 ●增加一列 SQLite3安装网址:https://www.sqlite.org/download.html ​

m0_74985965的博客 7081

h5支付不能打开支付宝 ios_iOS支付宝H5支付无法返回APP解决方案

本文前大段在讲楼主是如何解决这个问题的,以及中间遇到的麻烦。赶时间的同学可以直接看最后的 最终解决方案。在讨论之前,我们先看看官方文档上的一句话:注意:在iOS系统中,唤起支付宝App支付完成后,不会自动回到浏览器或商户APP。用户可手工切回到浏览器或商户APP;支付宝H5收银台会自动跳转回商户return_url指定的页面。what? 官方直接跟我们说GG了?楼主不甘心,还是想尝试一下。借鉴之前...

weixin_39864101的博客 854

Codex智能体从零搭建:环境配置、代码管理与MCP扩展实战

AI智能体(Agent)作为连接大语言模型与实际应用的关键技术,通过感知、决策与执行框架,将AI能力融入具体工作流。其核心原理在于利用提示工程、上下文管理与工具调用,将自然语言指令转化为可执行操作。在软件开发领域,AI智能体能够显著提升代码生成、项目管理和自动化任务的效率。通过Model Context Protocol(MCP)等标准化协议,智能体可以安全、结构化地集成外部工具与服务,实现能力扩展。本文聚焦于Codex这一AI驱动的代码助手平台,详细解析其环境配置、代码索引、记忆系统等核心模块,并深入探讨

weixin_34220179的博客 589

iPhone开发【二十七】数据持久化总结之第6篇(终结篇)—5种数据持久化方法对比总结

本篇对IOS中常用的5种数据持久化方法进行简单对比总结 第1种:UserDefaults(iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults) 1)易用性很强 2)数据存储在.plist文件中 3)一般保存首选项信息、缓存数据等,适用存储较少量数据的情况 4)缺点:无法将自定义对象序列化到属性列表中 第2种:属性列表(iPhone开发【二十一】数据持久化总结之

长弓的专栏 4950

Comsol超声空化气泡仿真入门:从零搭建模型到网格划分的完整流程

本文详细介绍了使用Comsol进行超声空化气泡仿真的完整流程,从物理基础理解到模型搭建、网格划分及求解器设置。通过具体步骤和示例代码,帮助初学者和工程师快速掌握这一关键技术,应用于医疗设备和工业清洗等领域。

weixin_29289821的博客 160

深入理解iPhone数据持久化(手把手教你iphone开发 - 基础篇)

 作者:孙东风 2009-11-11(请尊重作者劳动成果,转载务必注明出处)在所有的移动开发平台数据持久化都是很重要的部分:在j2me中是rms或保存在应用程序的目录中,在symbian中可以保存在相应的磁盘目录中和数据库中。symbian中因为权限认证的原因,在3rd上大多数只能访问应用程序的private目录或其它系统共享目录。在iphone中,apple博采众长,提供了多种数据持久化的方

大道至简 1万+

TVS 管击穿电压与钳位电压的工程解析

TVS二极管的核心参数击穿电压(VBR)和钳位电压(VC)常被混淆,但二者具有本质区别。VBR是

硬核科技 477

制作INCA和CANape通用的A2L

CANape和INCA通用的A2L配置与修改

赞的博客 5960

iPhone开发【二十六】数据持久化总结之第5篇—CoreData技术

转载请注明出处,原文网址:http://blog.youkuaiyun.com/m_changgong/article/details/8435094 作者:张燕广 实现的功能:1)演示使用CoreData持久化数据(仅显示基本操作,不包括很多复杂的操作)。 关键词:数据持久化 CoreData 1、新建一空工程,命名为:Persistence_CoreData: 2、选中“Use C

长弓的专栏 7950

一种独特机理驱动的化学反应分类器详解

代码位置第 47-300+ 行// atom_494: 硫原子,度数=2,化合价=2,无H,无电荷!// atom_35: 氧原子,度数=1,1个H,无电荷// atom_347: 氧原子,度数=2,无H,无电荷!→atom_494()[OD1h1+0]→atom_35()→atom_347()特性传统方法(MCS)NameRXN(机理驱动)匹配策略最大公共子结构原子类型模式 + 操作码时间复杂度O(n) - 线性扫描机理理解无内置化学机理原子映射需额外计算自动推导准确性结构相似。

ASKCOS博客 156

iPhone开发之SQLite

现在网站开发和软件开发,数据库的支持是少不了的;在iPhone开发中,作为数据持久化的解决方案中,SQLite是不错的选择,它既轻量占用资源少,又可以方便嵌入到程序中,在一些嵌入式设备中有着广泛使用。 SQLite提供了命令行工具sqlite3,创建创建库。 cjdx@~/Desktop$ sqlite3 school.sqlite3 SQLite version 3.6....

dlt86904的博客 166

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深入理解iPhone数据持久化(手把手教你iphone开发 – 基础篇)

在所有的移动开发平台数据持久化都是很重要的部分:在j2me中是rms或保存在应用程序的目录中,在symbian中可以保存在相应的磁盘目录中和数据库中。symbian中因为权限认证的原因,在3rd上大多数只能访问应用程序的private目录或其它系统共享目录。在iphone中,apple博采众长,提供了多种数据持久化的方法,下面笔者会逐个进行详细的讲解。 iphone提供的数据持久化的方...

146

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

iPhone开发数据持久化总结之第4篇—sqlite3数据库 .

转载请注明出处,原文网址:http://blog.youkuaiyun.com/m_changgong/article/details/8284135 作者:张燕广 实现的功能:1)演示使用sqlite3持久化数据。 关键词:数据持久化 sqlite3 数据库 1、将上一篇iPhone开发【二十二】数据持久化总结之第3篇归档(NSKeyedArchiver、NSKeyedUn...

阿弥陀佛 160

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

iphone开发中数据持久化之——嵌入式SQLite(三)

两篇分别讨论了使用属性列表的数据持久化、使用对象归档的数据持久化,本文将讨论第三个实现数据持久化的方法---嵌入式SQL数据库SQLite3。SQLite3在存储和检索大量数据方面非常有效。它还能够对数据进行复杂的聚合,与使用对象执行这些操作相比,获得结果的速度更快。SQLite3使用SQL,SQL是用于关系数据库的标准语言,并且有自己的语法语言,具体的可以参考SQL相关教程。本文将介绍如何应用iphone应用程序中进行设置并与SQLite数据库交互,实现数据的存储与检索等。

Belial计算机视觉&机器视觉专栏 1668

iPhone开发进阶(9)--- 用SQLite管理数据库

From:http://www.2cto.com/kf/201110/108296.html   今天我们来看看iPhone 中数据库的使用方法。iPhone 中使用名为SQLite 的数据库管理系统。它是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能...

移动开发 145

iPhone/iPad sqlite3数据库操作之fmdb

首先来看一下如何使用sqlite3来实现数据库的操作,先上码吧。。。 头文件如下: @interface DbBase :NSObject {     sqlite3  *database;         // database     NSString *filePath;         // File path.     BOOL      isOpen;

秋落有声 1293
上一篇: iPhone开发【二十三】常用IOS开源组件【第1篇】
下一篇: 三年JavaEE开发积累的那些代码之一:JavaSE篇
程序员长弓
博客等级 码龄20年 650粉丝 183原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值