iOS sqlite并不难(呵呵,难了不会,会了不难)

众所周知,sqlite3是ios数据存储其一,具体优点和缺点,我就不再赘述,请大家搜索之。

一、必备条件

在ios项目中使用sqlite需要添加  libsqlite3.dylib 库

二、简单介绍常用方法

sqlite3          *db, 数据库句柄,跟文件句柄FILE很类似
sqlite3_stmt      *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句
sqlite3_open(),   打开数据库,没有数据库时创建。
sqlite3_exec(),   执行非查询的sql语句
Sqlite3_step(), 在调用sqlite3_prepare后,使用这个函数在记录集中移动。
Sqlite3_close(), 关闭数据库文件
还有一系列的函数,用于从记录集字段中获取数据,如
sqlite3_column_text(), 取text类型的数据。
sqlite3_column_blob(),取blob类型的数据
sqlite3_column_int(), 取int类型的数据

三、创建(或打开)数据库

3-1首先自定义一个方法,返回我们当前应用程序沙盒目录(也就是说希望数据库保存在哪里)

[cpp] view
plain
copy

  1. -(NSString *) dataFilePath{  
  2.   
  3.    NSArray *path =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  4.   
  5.     NSString *document = [path objectAtIndex:0];  
  6.   
  7.     return [document stringByAppendingPathComponent:TABLENAME];//'persion.sqlite'  
  8.   
  9. }  

3-2 在指定位置 创建或打开一个数据库

SQLITE_OK是sqlite3的一个常量,代表操作执行成功

[java] view
plain
copy

  1. //SQLite3  
  2.   
  3. sqlite3 *database;  
  4. if (sqlite3_open([[self dataFilePath] UTF8String], &database)!=SQLITE_OK) {  
  5.     sqlite3_close(database);  
  6.     NSAssert(0, @"open database faid!");  
  7.     NSLog(@"数据库创建失败!");  
  8. }  

【注意】由于sqlite3是基于C语言编写的,而不是纯粹的object-c,所以有关字符串,我们不能使用NSString,因为它不识别,所以只能用c语言的字符串,char*,好在Nsstring提供了转换的方法,那就是 UTF8String。

上图便是我们创建的数据库在app中的指定位置。

四、创建一张表

[cpp] view
plain
copy

  1. NSString *ceateSQL = @"CREATE TABLE IF NOT EXISTS PERSIONINFO(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, AGE INTEGER, SEX TEXT, WEIGHT INTEGER, ADDRESS TEXT)";  
  2.   
  3. char *ERROR;  
  4.   
  5. if (sqlite3_exec(database, [ceateSQL UTF8String], NULL, NULL, &ERROR)!=SQLITE_OK){  
  6.     sqlite3_close(database);  
  7.     NSAssert(0, @"ceate table faild!");  
  8.     NSLog(@"表创建失败");  
  9. }  

我创建了一张名为PERSIONINFO的数据库表,其中有一个自增的ID,和NAME,AGE,SEX,WEIGTH,ADDRESS五个属性。

五、查询表数据

[cpp] view
plain
copy

  1. NSString *quary = @"SELECT * FROM PERSIONINFO";//SELECT ROW,FIELD_DATA FROM FIELDS ORDER BY ROW  
  2. sqlite3_stmt *stmt;  
  3. if (sqlite3_prepare_v2(database, [quary UTF8String], -1, &stmt, nil) == SQLITE_OK) {  
  4.       
  5.     while (sqlite3_step(stmt)==SQLITE_ROW) {  
  6.           
  7.         char *name = (char *)sqlite3_column_text(stmt, 1);  
  8.         NSString *nameString = [[NSString alloc] initWithUTF8String:name];  
  9.         self.nameTextField.text = nameString;  
  10.         [nameString release];  
  11.           
  12.         int age = sqlite3_column_int(stmt, 2);  
  13.         self.ageTextField.text = [NSString stringWithFormat:@"%d",age];  
  14.           
  15.         char *sex = (char *)sqlite3_column_text(stmt, 3);  
  16.         NSString *sexString = [[NSString alloc] initWithUTF8String:sex];  
  17.         self.sexTextField.text = sexString;  
  18.         [sexString release];  
  19.           
  20.         int weight = sqlite3_column_int(stmt, 4);  
  21.         self.weightTextField.text = [NSString stringWithFormat:@"%d",weight];  
  22.           
  23.           
  24.         char *address = (char *)sqlite3_column_text(stmt, 5);  
  25.         NSString *addressString = [[NSString alloc] initWithUTF8String:address];  
  26.         self.addressTextField.text = addressString;  
  27.         [addressString release];  
  28.           
  29.           
  30.     }  
  31.       
  32.     sqlite3_finalize(stmt);  
  33. }  
  34. //用完了一定记得关闭,释放内存  
  35. sqlite3_close(database);  

sqlite3_prepare_v2是执行查询的方法,当查询语句执行成功时,使用sqlite3_step当游标指向每一行SQLITE_ROW时,我们开始读取数据

sqlite_3_column_text可以读取字符串类型的数据,参数二为column号,sqlite_3column_int读取int类型数据,其它的就不举例了,大家可以尝试。

六、保存,插入数据

[cpp] view
plain
copy

  1. char *update = "INSERT OR REPLACE INTO PERSIONINFO(NAME,AGE,SEX,WEIGHT,ADDRESS)""VALUES(?,?,?,?,?);";  
  2. //上边的update也可以这样写:  
  3. //NSString *insert = [NSString stringWithFormat:@"INSERT OR REPLACE INTO PERSIONINFO('%@','%@','%@','%@','%@')VALUES(?,?,?,?,?)",NAME,AGE,SEX,WEIGHT,ADDRESS];  
  4.   
  5. char *errorMsg = NULL;  
  6. sqlite3_stmt *stmt;  
  7.   
  8. if (sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK) {  
  9.       
  10.     //【插入数据】在这里我们使用绑定数据的方法,参数一:sqlite3_stmt,参数二:插入列号,参数三:插入的数据,参数四:数据长度(-1代表全部),参数五:是否需要回调  
  11.     sqlite3_bind_text(stmt, 1, [self.nameTextField.text UTF8String], -1, NULL);  
  12.     sqlite3_bind_int(stmt, 2, [self.ageTextField.text intValue]);  
  13.     sqlite3_bind_text(stmt, 3, [self.sexTextField.text UTF8String], -1, NULL);  
  14.     sqlite3_bind_int(stmt, 4, [self.weightTextField.text integerValue]);  
  15.     sqlite3_bind_text(stmt, 5, [self.addressTextField.text UTF8String], -1, NULL);  
  16. }  
  17. if (sqlite3_step(stmt) != SQLITE_DONE)  
  18. NSLog(@"数据更新失败");  
  19. NSAssert(0, @"error updating :%s",errorMsg);  
  20.   
  21.  sqlite3_finalize(stmt);  
  22.   
  23. sqlite3_close(database);  

当然,你也可以用大家熟知的,直接把数据写在要执行的sql语句后面,如下:

[cpp] view
plain
copy

  1. NSString *insert = [NSString stringWithFormat:@"INSERT OR REPLACE INTO PERSIONINFO('%@','%@','%@','%@','%@')VALUES('%@','%d','%@','%d','%@')",NAME,AGE,SEX,WEIGHT,ADDRESS,@"小杨",23,@"man",65,@"中国北京,haidian,shangdi,xinxiRoad,100014"];  
  2.   
  3. //执行语句  
  4. if (sqlite3_exec(database, [insert UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {  
  5.     sqlite3_close(database);  
  6. }  

这样看着是不是就轻松很多了呢?

七:运行效果:

demo中我在每回打开APP时,在viewdidload里,读取数据库,如果有数据,赋值到相应的属性,当用户按下home键后,及时保存当前数据。也就是说,模拟一个游戏,当我们来电话时或是按下home键做别的事情时,一定要为用户保存当前进度和数据,不然下次打开游戏,又归零了?

demo地址:

http://download.csdn.net/detail/mad1989/5752207

时间: 2024-09-16 11:44:33

iOS sqlite并不难(呵呵,难了不会,会了不难)的相关文章

iOS sqlite对数据库的各种操作(日常整理全)_IOS

在IOS中使用Sqlite来处理数据.如果你已经了解了SQL,那你可以很容易的掌握SQLite数据库的操作.iOS对于数据库的操作:增加.删除.查找.修改具体介绍如下所示: 首先需要创建一个数据库:本程序的数据库是在火狐浏览器里的插件里写的微量型数据库 火狐找查找SQLite Manager的步骤: 第一步:在工具栏找到附加组件,点击进入 第二步:搜索 SQP,找到并下载,安装完成之后需要重启浏览器 第三步:在工具只乐观找到SQLite Manager,点击打开 SQLite Manager界面

iOS - SQLite 数据库存储

1.SQLite 数据库 SQLite 是一种轻型的嵌入式数据库,安卓和 iOS 开发使用的都是 SQLite 数据库.它占用资源非常低,在嵌入式设备中,可能需要几百 K 的内存数据就够了.他的处理速度比 Mysql.PostgreSQL 这两款著名的数据库都要快.数据库的存储和 Excel 很像,以表(table)为单位.表由多个字段(列.属性.column)组成,表里面的每一行数据称为记录.数据库操作包含打开数据库.创建表,表的增.删.改.查. SQL(Structured Query La

iOS中SQLite数据库使用详解

使用SQLite数据库 创建数据库 创建数据库过程需要3个步骤: 1.使用sqlite3_open函数打开数据库: 2.使用sqlite3_exec函数执行Create Table语句,创建数据库表: 3.使用sqlite3_close函数释放资源. 这个过程中使用了3个SQLite3函数,它们都是纯C语言函数,通过Objective-C去调用C函数当然不是什么问题,但是也要注意Objective-C数据类型与C数据类型兼容性问题. 下面我们使用SQLite技术实现备忘录案例,与属性列表文件实现

iOS App项目中引入SQLite数据库的教程_IOS

引入SQLitesqlite是纯C实现的,所以注定了它是一个跨平台利器,在Android与IOS下均能使用,而且完全可以写出通用的代码,方便我们移植.当然Android和IOS下都有封装过的sqlite给开发者使用,不过这样子一个是不方便移植,另一个是封装后的效率咋样我们也不知道,所以还是原生态的最健康.最后一个重要的原因就是原生的使用也是相当简单.我将在接下来的教程中为您一一讲解. 首先最重要的一点是在工程中导入sqlite,苹果的SDK已经给你包含进来了,所以只要导入一个叫 libsqlit

iOS中sqlite数据库的原生用法_IOS

在iOS中,也同样支持sqlite.目前有很多第三方库,封装了sqlite操作,比如swift语言写的SQLite.swift.苹果官网也为我们封装了一个框架:CoreData. 它们都离不开Sqlite数据库的支持. 本文主要介绍下,如何在swift中使用原生的sqlite的API. 在Xcode中引入sqlite API 新建一个swift项目后,我们需要让项目引入sqlite的动态链接库: 1.项目配置界面,选择Build Phases 2.点开Link Binary With Libra

iOS中sqlite的详细用法_IOS

本文实例为大家分享了ios中sqlite的具体操作方法,供大家参考,具体内容如下 #import <sqlite3.h> @interface ViewController () { sqlite3 *_sqldb; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typicall

iOS中SQLite的操作方法_IOS

今天终于花了点时间把之前项目中使用到的对SQLite操作的方法整理一下并上传到github上,下载地址:(https://github.com/peanutNote/QYSQLiteManagerDemo.git). 与其他第三方目的一样,主要是为了使代码中有关对SQLite操作简单化,具体用法: 将QYSQLiteManager文件add到项目中,并在需要对SQLite进行操作的类中添加#import "QYSQLiteManager" . // 插入语句 - (void)inser

ios 用swift语言的,然后链接数据库,sqlite。

问题描述 ios 用swift语言的,然后链接数据库,sqlite. ios开发,用是swift语言.如何链接SQLite数据库.求详细代码 解决方案 iOS数据库Sqliteios SQlite操作数据库iOS中操作SQLite数据库 解决方案二: 用fmdb. http://www.tuicool.com/articles/jA3yUfj

攘外必先安内 定位准确优质原创并不难

现在各种"采集复制伪原创"手法.软件风靡一时,原因很简单,原创费时.费力,站长.SEOER要做的事情多了去了,外链.内链.网站监测分析与改进,各种推广,甚至广告洽谈,哪有这么多时间整原创呀!还有些人说,原创真难呀,我不会写原创,只有整采集复制伪原创了.   有需求就有市场,异常火爆的伪原创市场 但我说,朋友你们错了,只有你网站原创内容(绝大多数标准化生产企业.医院就只有走差异化营销道路,深入挖掘自己服务.产品的独特卖点)做好了,你的外链.内链.各种推广才有了基础与底气,也才可以真正地做