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

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 09:53 点击:

 

今天我们来看看iPhone 中数据库的使用方法。iPhone 中使用名为SQLite 的数据库管理系统。它是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

 

其使用步骤大致分为以下几步:

 

创建DB文件和表格

添加必须的库文件(FMDB for iPhone, libsqlite3.0.dylib)

通过FMDB 的方法使用SQLite

创建DB文件和表格

 $ sqlite3 sample.db

sqlite> CREATE TABLE TEST(

   ...>  id INTEGER PRIMARY KEY,

   ...>  name VARCHAR(255)

   ...> );

简单地使用上面的语句生成数据库文件后,用一个图形化SQLite管理工具,比如Lita 来管理还是很方便的。

 

然后将文件(sample.db)添加到工程中。

 

添加必须的库文件(FMDB for iPhone, libsqlite3.0.dylib)

首先添加Apple 提供的sqlite 操作用程序库ibsqlite3.0.dylib 到工程中。

 

位置如下

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${VER}.sdk/usr/lib/libsqlite3.0.dylib

 

这样一来就可以访问数据库了,但是为了更加方便的操作数据库,这里使用FMDB for iPhone。

 

svn co http://flycode.googlecode.com/svn/trunk/fmdb fmdb

如上下载该库,并将以下文件添加到工程文件中:

 

FMDatabase.h

FMDatabase.m

FMDatabaseAdditions.h

FMDatabaseAdditions.m

FMResultSet.h

FMResultSet.m

通过FMDB 的方法使用SQLite

使用SQL 操作数据库的代码在程序库的fmdb.m 文件中大部分都列出了、只是连接数据库文件的时候需要注意 — 执行的时候,参照的数据库路径位于Document 目录下,之前把刚才的sample.db 文件拷贝过去就好了。

 

位置如下

/Users/xxxx/Library/Application Support/iPhone Simulator/User/Applications/xxxx/Documents/sample.db

以下为链接数据库时的代码:

 

 BOOL success;

NSError *error;

NSFileManager *fm = [NSFileManager defaultManager];

NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"sample.db"];

success = [fm fileExistsAtPath:writableDBPath];

if(!success){

  NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sample.db"];

  success = [fm copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];

  if(!success){

    NSLog([error localizedDescription]);

  }

}

 

// 连接DB

FMDatabase* db = [FMDatabase databaseWithPath:writableDBPath];

if ([db open]) {

  [db setShouldCacheStatements:YES];

 

  // INSERT

  [db beginTransaction];

  int i = 0;

  while (i++ < 20) {

    [db executeUpdate:@"INSERT INTO TEST (name) values (?)" , [NSString stringWithFormat:@"number %d", i]];

    if ([db hadError]) {

      NSLog(@"Err %d: %@", [db lastErrorCode], [db lastErrorMessage]);

    }

  }

  [db commit];

 

  // SELECT

  FMResultSet *rs = [db executeQuery:@"SELECT * FROM TEST"];

  while ([rs next]) {

    NSLog(@"%d %@", [rs intForColumn:@"id"], [rs stringForColumn:@"na

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Lexical or Preprocessor Issue 'xxx.h
    • ios学习笔记(二)xcode 4.3.2下实现基本交互
    • ios版本的helloworld
    • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
    • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
    • IOS类似iphone通讯录TableView的完整demo【附源码】
    • UITableView一些方法
    • [iPhone中级]iPhone团购信息客户端的开发 (二)
    • iphone(object-c)内存管理(1)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1