- 浏览: 580638 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
JYY282:
[i][/i]
Ecshop与Shopex的比较 -
qq247890212:
我也遇见这问题了,真诡异。重新下载个猫换了就好了。 太浪费时间 ...
诡异:ClassNotFoundException: org.springframework.web.filter.CharacterEncoding
From :http://linglong117.blog.163.com/blog/static/277145472009111403520676/
SQLite是基于C的API,在iPhone中的运行速度超级快(在苹果网站上也有一个对比,确实应该是速度最快的)。
由于在iPhone3.0上已经支持了Core Data,是苹果一个新的API,并且是基于SQlite的。速度也是非常快吧,信不信由你。所以我们对SQLite仅需要懂一些即可,以下是一些基础信息
//============
首先在FrameWorks 中加入SQLite 的库: lib/libsqlite3.dylib
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/libsqlite3.dylib
然后包含头文件#import <sqlite3.h>
一般操作:
//============= //databasePath 数据库路径 //database 数据库名 int n = sqlite3_open([databasePath UTF8String], &database); //打开数据库 if(n != SQLITE_OK){ //判断数据库是否打开 NSLog(@"can not open the database"); return; } //执行sql 语句 sqlite3_stmt *stmt; char *sql = "SELECT TimeDesc FROM tblTime WHERE isActivated=1"; //sql 语句 sqlite3_prepare_v2(database, sql, -1, &stmt, NULL); int code = sqlite3_step(stmt); NSMutableArray *arrayData = [[NSMutableArray alloc] init]; NSMutableDictionary *dicTimeDesc = [[NSMutableDictionary alloc] init]; //把sql 语句的查询结果存储到 NSMutableArray 中 while (code == SQLITE_ROW) { char *c; NSString *s; c = (char *)sqlite3_column_text(stmt, 0); s = [NSString stringWithUTF8String:c]; [dicTimeDesc setObject:s forKey:@"TimeDesc"]; [s release]; //int n; //n = sqlite3_column_int(stmt2,0); [arrayData addObject:dicTimeDesc]; code = sqlite3_step(stmt); } sqlite3_finalize(stmt); sqlite3_close(database); //关闭数据库 //============== //以下内容为网络上摘取的,我没经过验证,可以做为参考
【1】打开数据库,如果没有,那么创建一个
sqlite3* database_;
-(BOOL) open{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"mydb.sql"];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL find = [fileManager fileExistsAtPath:path];
//找到数据库文件mydb.sql
if (find) {
NSLog(@"Database file have already existed.");
if(sqlite3_open([path UTF8String], &database_) != SQLITE_OK) {
sqlite3_close(database_);
NSLog(@"Error: open database file.");
return NO;
}
return YES;
}
if(sqlite3_open([path UTF8String], &database_) == SQLITE_OK) {
bFirstCreate_ = YES;
[self createChannelsTable:database_];//在后面实现函数createChannelsTable
return YES;
} else {
sqlite3_close(database_);
NSLog(@"Error: open database file.");
return NO;
}
return NO;
}
【2】创建表格
//创建表格,假设有五个字段,(id,cid,title,imageData ,imageLen )
//说明一下,id为表格的主键,必须有。
//cid,和title都是字符串,imageData是二进制数据,imageLen 是该二进制数据的长度。
- (BOOL) createChannelsTable:(sqlite3*)db{
char *sql = "CREATE TABLE channels (id integer primary key, \
cid text, \
title text, \
imageData BLOB, \
imageLen integer)";
sqlite3_stmt *statement;
if(sqlite3_prepare_v2(db, sql, -1, &statement, nil) != SQLITE_OK) {
NSLog(@"Error: failed to prepare statement:create channels table");
return NO;
}
int success = sqlite3_step(statement);
sqlite3_finalize(statement);
if ( success != SQLITE_DONE) {
NSLog(@"Error: failed to dehydrate:CREATE TABLE channels");
return NO;
}
NSLog(@"Create table 'channels' successed.");
return YES;
}
【3】向表格中插入一条记录
假设channle是一个数据结构体,保存了一条记录的内容。
- (BOOL) insertOneChannel:(Channel*)channel{
NSData* ImageData = UIImagePNGRepresentation( channel.image_);
NSInteger Imagelen = [ImageData length];
sqlite3_stmt *statement;
static char *sql = "INSERT INTO channels (cid,title,imageData,imageLen)\
VALUES(?,?,?,?)";
//问号的个数要和(cid,title,imageData,imageLen)里面字段的个数匹配,代表未知的值,将在下面将值和字段关联。
int success = sqlite3_prepare_v2(database_, sql, -1, &statement, NULL);
if (success != SQLITE_OK) {
NSLog(@"Error: failed to insert:channels");
return NO;
}
//这里的数字1,2,3,4代表第几个问号
sqlite3_bind_text(statement, 1, [channel.id_ UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 2, [channel.title_ UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_blob(statement, 3, [ImageData bytes], Imagelen, SQLITE_TRANSIENT);
sqlite3_bind_int(statement, 4, Imagelen);
success = sqlite3_step(statement);
sqlite3_finalize(statement);
if (success == SQLITE_ERROR) {
NSLog(@"Error: failed to insert into the database with message.");
return NO;
}
NSLog(@"Insert One Channel#############:id = %@",channel.id_);
return YES;
}
【4】数据库查询
这里获取表格中所有的记录,放到数组fChannels中。
- (void) getChannels:(NSMutableArray*)fChannels{
sqlite3_stmt *statement = nil;
char *sql = "SELECT * FROM channels";
if (sqlite3_prepare_v2(database_, sql, -1, &statement, NULL) != SQLITE_OK) {
NSLog(@"Error: failed to prepare statement with message:get channels.");
}
//查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值。
while (sqlite3_step(statement) == SQLITE_ROW) {
char* cid = (char*)sqlite3_column_text(statement, 1);
char* title = (char*)sqlite3_column_text(statement, 2);
Byte* imageData = (Byte*)sqlite3_column_blob(statement, 3);
int imageLen = sqlite3_column_int(statement, 4);
Channel* channel = [[Channel alloc] init];
if(cid)
channel.id_ = [NSString stringWithUTF8String:cid];
if(title)
channel.title_ = [NSString stringWithUTF8String:title];
if(imageData){
UIImage* image = [UIImage imageWithData:[NSData dataWithBytes:imageData length:imageLen]];
channel.image_ = image;
}
[fChannels addObject:channel];
[channel release];
}
sqlite3_finalize(statement);
}
//===================
打开数据库
sqlite3 *database = NULL; //建立一个sqlite数据库变量 int sqlite3_open(const char *文件名, sqlite3 **db); //那个文件名需要是cString, //之后那个db对象使用我们建立的database变量 //以下是一个开打的例子: NSString *fileAddress = [[NSBundle mainBundle] pathForResource:@"预存文件的文件名" ofType:@"db"]; //db是扩展名 if(sqlite3_open([fileAddress UTF8String], &database) == SQLITE_OK) //UTF8String方法转换NSString为cString
执行一个SQLite语句:
int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *context, char **error);
关闭一个数据库:
int sqlite3_close(sqlite3 *db); //这个不用解释了吧
一个响应函数的格式:
int callback(void *context, int count, char **values, char **columns);
发表评论
-
Objective-C 与 C++ 的异同
2013-04-02 12:03 1396http://www.cnblogs.com/y041039 ... -
Cocos2D-X是全球知名的开源跨平台手机游戏引擎
2013-01-22 10:05 2751http://www.oschina.net/p/cocos ... -
iOS Keyboard 键盘高度变化 自适应
2013-01-15 15:43 3249[[NSNotificationCenter default ... -
iOS使用自定义字体
2012-11-27 12:11 12140From: http://blog.csdn.net/csy1 ... -
4 款类似 Facebook/Path 切换效果的 iOS 组件
2012-11-27 12:03 2184From: http://blog.csdn.net/lia ... -
Path 2.0的UI界面设计详细介绍
2012-11-27 11:56 1463如Path的创始人Dave Morin ... -
史上最全的App Store邮箱列表
2012-11-27 11:51 1269From: http://roybaby.blog.51cto ... -
iOS从info.plist 获取项目的名称及版本号
2012-11-16 10:54 1664From: http://blog.sina.com.cn/s ... -
MapKit annotation drag and drop with callout info update
2012-10-13 10:38 2403http://hollowout.blogspot ... -
NSArray 或NSDictionary 调用writeToFile方法失败原因
2012-08-31 10:03 4465NSArray 或NSDictionary 调用writeTo ... -
如何让IOS应用从容地崩溃
2012-08-30 15:25 1615From: http://www.cocoachina.com ... -
iOS中判断设备系统版本
2012-08-29 17:17 31710在iOS开发中,经常要考虑系统的向下兼容,如果使用 ... -
iOS 汉字转拼音
2012-08-21 16:42 1463From: http://www.cnblogs.com/v2 ... -
iOS模拟器截图工具
2012-08-17 16:35 1654From: http://magicalboy.com/ios ... -
XCode下的iOS单元测试
2012-08-10 17:47 1163From: http://mobile.51cto.com/ ... -
AFNetworking
2012-08-08 10:54 4648AFNetworking on github: https:/ ... -
Wrapping Conventions
2012-08-01 15:54 822Wrapping Conventions ... -
Core Animation如何使显式动画结束时的值直接作用Layer
2012-08-01 14:51 3793(1)使用隐式动画会直接改变layer的属性值,如: ima ... -
How To Debug Memory Leaks with XCode and Instruments Tutoria
2012-07-31 16:30 1053From: http://www.raywenderlich. ... -
Using Properties in Objective-C Tutorial
2012-07-31 16:27 924From: http://www.raywenderlich. ...
相关推荐
下面将详细阐述如何在iPhone应用中使用SQLite3.0。 1. **安装SQLite**: 在Xcode项目中,无需额外安装SQLite库,因为Apple已将其集成到iOS SDK中。只需包含必要的头文件`#import <sqlite3.h>`,就可以在Objective-C...
"Iphone Persistence SQLite"这个压缩包文件可能包含了实现上述功能的源代码,你可以通过阅读和运行这些代码来加深对SQLite在iOS应用中使用方法的理解。同时,这也是一个实践的好机会,你可以根据自己的需求修改和...
对于iOS应用程序而言,这意味着开发者可以直接将SQLite集成到自己的应用程序中,无需额外的网络配置或服务器支持。这种特性使得SQLite成为了iOS应用开发中的首选数据库解决方案之一。 #### 三、SQLite管理工具 ...
通过学习和实践"最新的iPhone SQLite小程序",开发者不仅可以掌握如何在iOS应用中使用SQLite,还能了解到如何有效地管理数据,提升应用的用户体验。同时,熟悉SQLite也将为开发者在其他平台或项目上的数据库操作打下...
根据给定的信息,我们可以总结出关于 SQLite3 在 iPhone 数据库应用中的基础操作的相关知识点。 ### SQLite3 概述 SQLite3 是一个轻量级、零配置的数据库引擎,非常适合用于移动设备上的应用开发,比如 iOS 应用。...
本实例将聚焦于如何在iPhone应用中使用SQLite3进行数据持久化操作。 SQLite3是一个嵌入式的SQL数据库引擎,它不需要独立的服务进程,可以直接集成到应用程序中。与Core Data相比,SQLite3提供了更直接的SQL语句操作...
标签 "iphone sqlite" 进一步强调了我们的讨论将集中在iOS平台上的SQLite应用开发。 从压缩包子文件的文件名称 "sqlite" 来看,可能包含的是一个SQLite数据库文件,或者是用于演示的SQLite库或者教程文件。这个文件...
"iPhone SQLite"这个标题暗示我们将讨论如何在iPhone应用中利用SQLite进行数据管理。 SQLite是一个开源的关系型数据库,它支持SQL语法,并且不需要单独的服务进程来运行。在iOS应用中,SQLite库可以直接嵌入到应用...
《基于SQLite数据库的...通过此项目,新手开发者可以深入理解SQLite在iPhone应用中的应用,为后续更复杂的项目打下坚实的基础。同时,这个项目也展示了如何将理论知识转化为实际应用,是学习过程中的一个重要里程碑。
在iPhone应用中,可以使用自定义手势来实现类似效果。 - 第三方库:如MMDrawerController或SWRevealViewController,这些库提供了便捷的方式来实现侧边栏功能,包括动画效果和交互控制。 【描述】"侧边栏"的实现...
本案例将探讨如何在iPhone应用中集成并使用SQLite3。 首先,你需要在Xcode项目中引入SQLite3库。这可以通过在“Build Phases”设置中添加`libsqlite3.tbd`或`libsqlite3.dylib`库来完成。确保你的目标平台支持这个...
由于其小巧、高效、无需服务器进程的特性,SQLite成为iPhone应用开发中常用的数据库解决方案。 在使用SQLite Database Browser时,首先需要了解SQLite的基本概念,如数据库(Database)、表(Table)、列(Column)...
下面我们将深入探讨如何在iPhone应用中使用SQLite,并通过代码示例来理解其工作原理。 1. **SQLite简介** SQLite是一种关系型数据库管理系统,支持SQL标准,具有事务处理、备份、恢复和多线程等功能。在iOS应用中...
SQLite是一种轻量级的关系型数据库管理系统,它不需要独立的服务器进程,可以直接嵌入到应用中,非常适合移动设备使用。通过FMDB,开发者可以利用Objective-C的语法与SQLite交互,简化了数据库操作的复杂性。 标签 ...
SQLite3是一个轻量级、嵌入式的数据库引擎,广泛用于iPhone和iPad应用,因为它无需单独的服务进程,直接与应用程序集成。Xcode作为Apple的官方集成开发环境,提供了对SQLite3的原生支持。本文将详细介绍如何在Xcode...
以下将详细介绍iOS环境下SQLite数据库的基本操作,以及如何在iPhone应用中实现这些操作。 1. **SQLite数据库安装与集成** 在iOS项目中,SQLite无需额外安装,因为它是iOS系统的一部分。开发者可以通过Objective-C...
### SQLite基本操作:iPhone应用中的数据库管理 SQLite是一种轻量级的数据库引擎,它被广泛用于移动应用开发,尤其是像iPhone这样的设备上,因为它不需要独立的服务进程,并且能够直接访问存储在本地设备上的数据...
此外,许多知名的应用程序和服务也使用了 SQLite,例如 Mozilla Firefox 使用 SQLite 存储用户浏览数据,Mac 计算机系统中也集成了多个 SQLite 实例用于不同的应用程序。PHP 内置 SQLite 支持,Skype、Symbian OS、...
SQLite数据库在移动设备和嵌入式系统中广泛应用,如iPhone和Android平台,因为它的轻量级和无需服务器的特性。然而,数据丢失是常见的问题,可能是由于意外删除、软件故障或者用户错误。在这种情况下,"SQLite数据库...