PIXNET Logo登入

zer931的部落格

跳到主文

歡迎光臨zer931在痞客邦的小天地

部落格全站分類:不設分類

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 2月 13 週一 201221:54
  • 在ios使用sqlite的救贖 - FMDB




在ios使用sqlite的救贖 - FMDB


FROM http://popcornylu.blogspot.com/2011/06/iossqlite-fmdb.html


 

最近有個專案需要小型資料庫,當然首選一定是iOS內建的sqlite,但是因為他是C的lib,使用上是出了名的困難。之前就有聽說用sqlite可以使用FMDB這個objective-c wrapper library。果不其然的簡單易用,我馬上把我使用經驗跟大家分享,如果你想馬上體驗,也可以去抓我的Sample project - MySqlite。
安裝FMDB
方法很簡單,就跟所有的open source library一樣的三步驟。
1. 首先你要先把 libsqlite3.dylib 加進library
2. 在需要用到FMDB的檔案中#import "FMDatabase.h"
3. 把FMDB的.h跟.m加進你的project中
接著就可以開心的使用FMDB
產生Database
基本上就是透過+[FMDatabase databaseWithPath]取產生Database instance。

NSURL *appUrl = [[[NSFileManager defaultManager]
URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask] lastObject];
NSString *dbPath = [[appUrl path] stringByAppendingPathComponent:@"MyDatabase.db"];
FMDatabase* db = [FMDatabase databaseWithPath:dbPath];
if (![db open]) {
NSLog(@"Could not open db");
}


產生所需table
其實寫過sql的應該對接下來的動作都不陌生,都一樣就是sql語法囉,詳細的請參考sqlite文件
下面的動作是產生一個user的table,並且有uid, name, descritpion三個column。我們使用IF NOT EXISTS來保證table不存在才會產生table。

if(![db executeUpdate:@"CREATE TABLE IF NOT EXISTS user (uid integer primary key asc autoincrement, name text, description text)"])
{
NSLog(@"Could not create table: %@", [db lastErrorMessage]);
}


新增record
在FMDB中,它有提供很貼心類似-[NSString stringWithFormat:...]的功能,但是比較不一樣的是如果你是字串,它會幫你加上括號,使用上更為便利。

if(![db executeUpdate:@"INSERT INTO user (name, description) VALUES (?,?)", name, description])
{
NSLog(@"Could not insert data: %@", [db lastErrorMessage]);
}


刪除record
一樣是下sql語法,這邊比較需要注意的是如果你要傳進去的是int, double這種基本形態,記得要轉換成物件,也就是用+[NSNumber numberWithInt]去轉換

if(![_db executeUpdate:@"DELETE FROM user WHERE uid = ?", [NSNumber numberWithInt:uid]])
{
NSLog(@"Could not delete data: %@", [db lastErrorMessage]);
}


查詢資料
在FMDB中有提供另外一個class FMResultSet來存放查詢出來的records,透過-[FMResultSet next]來iterate出所有的record

NSMutableArray* items = [NSMutableArray arrayWithCapacity:0];
FMResultSet *rs = [db executeQuery:@"SELECT uid, name, description from user"];
while ([rs next]) {
int uid = [rs intForColumn:@"uid"];
NSString *name = [rs stringForColumn:@"name"];
NSString *description = [rs stringForColumn:@"description"];
[items addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:uid], @"uid",
name, @"name",
description, @"description",
nil]];
}
[rs close];


基 本上在其他oo平台中有用過sql的,對於FMDB的設計應該並不陌生,可以說完全不會有太多的困難。而相較於用傳統的plist或是archive的方 法,我相信不管是效能上或是功能上,Sqlite+FMDB的組合絕對會更有優勢。對於中型以上的iOS程式應該會是標準配備。







(繼續閱讀...)
文章標籤

zer931 發表在 痞客邦 留言(0) 人氣(497)

  • 個人分類:DataBase
▲top
  • 2月 10 週五 201218:30
  • 初识SQLITE3

初识SQLITE3 (2007-09-23 02:47)
 from http://blog.chinaunix.net/space.php?uid=20619057&do=blog&id=1612259
 
(繼續閱讀...)
文章標籤

zer931 發表在 痞客邦 留言(0) 人氣(74)

  • 個人分類:DataBase
▲top
  • 2月 04 週六 201212:39
  • iPhone:在Core Data应用中使用原生Sql功能

 

iPhone:在Core Data应用中使用原生Sql功能
2010-01-20 14:35作者:天极网开发频道出处:天极网软件频道责任编辑:郑重
(繼續閱讀...)
文章標籤

zer931 發表在 痞客邦 留言(0) 人氣(4)

  • 個人分類:DataBase
▲top
1

個人資訊

zer931
暱稱:
zer931
分類:
不設分類
好友:
累積中
地區:

熱門文章

  • (4,557)[Oracle] Cursor 與 Cursor Variable 的使用
  • (263)取得指南針 / 羅盤 / Magnetometer 數值的方法
  • (3,981)VMware 的 Bridged, Host-only 和 NAT 網路型態
  • (4,496) NO-IP 使用教學
  • (248)搭建 Windows 上 Apache + Git 服务器
  • (141)NSArray與NSMutableArray與NSMutableDictionary
  • (270)UITableView cell自訂視圖中插入Table實現複雜介面
  • (7,044)C/C++ 箭頭(->) 、點(.)、雙冒號(::) 用法
  • (316)iOS 開發筆記 - 國曆轉農曆計算

文章分類

toggle GIT (3)
  • GIT MAC (1)
  • GIT Linux (2)
  • GIT Win (9)
toggle PHP (3)
  • Server 設定 (4)
  • 程式技巧篇 (4)
  • PDO (1)
toggle COCOS2D (2)
  • BOX2D (2)
  • 基本概念 (21)
toggle IOS (4)
  • PUSH SERVER (2)
  • 基本概念 (21)
  • DataBase (3)
  • 技巧篇 (20)
  • VMWare (3)
  • Winodws (2)
  • C++ (2)
  • ORACLE (2)
  • 未分類文章 (1)

最新文章

  • PHP.INI 打開DeBug模式
  • [JavaScript]null & undefined
  • 使用PDO時 產生 Zend Debugger Socket link error
  • phpMyAdmin sql query that uses parameters
  • PDO 介紹範例網址
  • genstrings across 多元路徑 Localizable
  • 實作 TableView Section 展開/收合
  • 分享一个搭建php版push服务器的流程
  • Push pem文件生成步骤
  • mac eclipse 設定php debugger

動態訂閱

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣: