fb_license

技術標籤

@selector (1) 初使化區塊 (1) 物件 (1) 物件導向 (2) 型別 (4) 封裝 (1) 流程控制 (1) 陣列 (3) 推論型別 (2) 實機測試 (1) 蓋索林(gasolin) (1) 模組 (1) 憑證 (1) 轉型 (1) 羅康鴻 (121) 類別 (1) 變數 (5) Accelerometer (1) ActiveRecord (1) Activity (1) AFNetworking (1) alloc (1) Android (3) Animation (1) App (1) App ID (1) APP上傳 (1) ASP.NET (1) AVAudioPlayer (1) block (1) C# (2) class (1) CLLocationManager (1) CLLocationManagerDelegate (1) CMMotionManager (4) Controller (1) delegate (1) DELETE語法 (1) Device Motion資料 (1) Dialog (1) DropDownList (1) dynamic language (2) Facebook SDK (9) FBRequest (5) FBRequestConnection (2) FMDB (1) Gesture Recognizers (6) GROUP BY (2) Gyro (1) HAVING (1) IBAction (1) IBOutlet (1) id (3) inheritance (1) init (1) Insert (1) instance variable (1) Interface Builder (1) iOS (70) iOS idea (7) iOS Introduction (1) Layout (1) Magnetometer (1) Menu (2) Method (2) MKMapView (1) MKPointAnnotation (1) MS SQL (5) Nil (1) NSArray (1) NSDictionary (1) NSError (1) NSFileManager & .plist (1) NSMutableArray (1) NSMutableDictionary (1) NSNotificationCenter (1) NULL (1) object (2) Objective-C (16) Objective-C idea (1) ORDER BY (1) Parameter (1) property (1) protocol (2) Provisioning (1) Proximate Sensor (1) Q and A (2) R類別 (1) Rails (9) RESTful SOA (9) Ruby (8) Scene (1) SEELECT (1) Segue (2) SEL (1) SELECT語法 (1) Shake (1) Simulator (1) SOA (8) SQL (6) SQL Server (5) SQL函數 (1) SQL彙總函數 SQL (1) SQLite (1) Storyboard (1) Style (1) Swift (1) Table (1) target & action (1) Theme (1) Toast (1) TRUNCATE TABLE語法 (1) UIActionSheet (1) UIActionSheetDelegate (1) UIActivityIndicatorView (1) UIAlertView (1) UIBarButtonItem (1) UIButton (1) UICollectionView (1) UICollectionViewDataSource (1) UIControl (9) UIDatePicker (1) UIImage (1) UIImagePickerController (2) UIImagePickerControllerDelegate (2) UIImageView (1) UILabel (1) UILongPressGestureRecognizer (1) UINavigationController (2) UIPanGestureRecognizer (1) UIPinchGestureRecognizer (1) UIProgressView (1) UIResponder (1) UIRotationGestureRecognizer (1) UISegmentedControl (1) UISlider (1) UIStepper (1) UISwipeGestureRecognizer (1) UISwitch (1) UITabBarController (1) UITableView (1) UITableViewDataSource (1) UITapGestureRecognizer (1) UITextField (1) UITextFieldDelegate (1) UITextView (2) UITextViewDelegate (1) UIToolBar (1) UIView (8) UIWebView (1) UPDATE語法 (1) var (2) VB.NET (7) View (4) WHERE子句 (1) XML (1)

2014/05/08

[iOS] FMDB


我是FMDB,我可以操作SQLite資料庫,幫您保存資料








第1步:建立一個名為"FMDB_SQLite"的"Single View Application"專案。



第2步:加入libsqlite3.0.dylib函數庫
  • iOS此提供操作SQLite的函數庫,需加入
  • 選取專案
  • 選取TARGETS的FMDB_SQLite專案
  • 選Build Phases
  • 選Link Binary with Libraries
  • 並點選"+"號
  • 搜尋sqlite3.0
  • 選取libsqlite3.0.dylib後點選"Add"


第3步:下載並加入FMDB套件
  • 並以複製到目的地的方式進行Copy


第4步:引用FMDatabase.h
  • 於ViewController.m檔中透過#import引用FBDatabase.h檔
ViewController.m
#import "FMDatabase.h"

第5步:開啟並建立資料庫
  • 於ViewController.m檔中建立getFMDatabase方法,此方法會回傳getFMDatabase物件
  • 透過傳送databaseWithPath訊息給FMDatabase類別,以指向特定路徑的SQLite資料庫檔
  • 接著透過open訊息實際開啟資料庫
ViewController.m
//取得FMDatabase資料庫物件 -(FMDatabase*)getFMDatabase{ //取得可讀寫的Document路徑, //並指向MyDatabase.db資料庫檔案。 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDirectory = [paths objectAtIndex:0]; NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"MyDatabase.db"]; //透過傳遞databaseWithPath訊息給FMDatabase , FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; //傳遞open訊息開啟資料庫 //開啟MyDatabase.db資料庫, //若MyDatabase.db檔案不存在, //則會自動建立MyDatabase.db檔案, //而後回傳取得FMDatabase物件 if ([db open] == YES) { //開啟成功回傳FMDatabase物件 return db; } else { //開啟失敗回傳nil return nil; } }

第6步:建立資料表
  • 建立"Create Table"按鈕,連接IBAction - createTable

  • 於createTable方法中透過傳送executeUpdate訊息,執行CREATE TABLE指令,以建立Users資料表
ViewController.m
//建立資料表 - (IBAction)createTable:(id)sender { //透過getFMDatabase訊息取得FMDatabase物件 FMDatabase *db = [self getFMDatabase]; //執行CREATE TABLE指令, //建立Users資料表, //其中包含id、Name、Age、Gender欄位, //而id設定為主鍵,資料型別會預設為Integer, //SQLite資料庫預設會自動進行流水號編號, //Name的型別為text, //Age的型別為integer, //Gender的型別為integer [db executeUpdate:@"CREATE TABLE Users (id integer primary key autoincrement, Name text, Age integer, Gender integer)"]; }

第7步:建立資料
  • 建立"Insert Data"按鈕,連接IBAction - insertData

  • 於insertData方法中透過傳送executeUpdate訊息,執行INSERT INTO令,以建立User資料
ViewController.m
//插入資料 - (IBAction)insertData:(id)sender { //透過getFMDatabase訊息取得FMDatabase物件 FMDatabase *db = [self getFMDatabase]; //執行INSERT INTO指令, //寫入一筆資料至Users表格中 [db executeUpdate:@"INSERT INTO Users (Name, Age, Gender) VALUES (?,?,?)", @"Jone", [NSNumber numberWithInt:20], [NSNumber numberWithInt:0]]; }

第8步:查詢資料
  • 建立"Select Data"按鈕,連接IBAction - selectData
  • 於insertData方法中透過傳送executeUpdate訊息,執行SELECT指令,以查詢User資料
  • 執行後取得的FMResultSet物件,即可透過next依序取得查詢後的每一筆資料
ViewController.m
//查詢資料 - (IBAction)selectData:(id)sender { //透過getFMDatabase訊息取得FMDatabase物件 FMDatabase *db = [self getFMDatabase]; NSLog(@"xxxx"); //執行SELECT指令, //選取所有資料 FMResultSet *rs = [db executeQuery:@"SELECT Name, Age, Gender FROM Users"]; //回傳的FMResultSet物件, //可透過next指向下一筆資料, //若有下一筆資料, //則next訊息會回傳YES while ([rs next]) { NSString *name = [rs stringForColumn:@"Name"]; int age = [rs intForColumn:@"Age"]; NSLog(@"name:%@, age:%d", name, age); NSString * str = [NSString stringWithFormat:@"name:%@, age:%d", name, age]; UIAlertView * alert =[[UIAlertView alloc] initWithTitle:nil message:str delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil]; [alert show]; } //傳送close訊息, //關閉讀取存耶的作業 [rs close]; }

第9步:執行
  • 若先按Create Table按鈕,以建立Users資料表
  • 接著按下Insert Data按鈕,建立User資料
  • 在按下Select Data按鈕,查詢資料






檔案連結:FMBD_SQLite.zip


篩選資料,WHERE子句:
  • SELECT指令可查詢資料表的資料,若要查詢特定的資料,可透過WHERE子句完成,比如:
    • 查詢id為1的資料,SELECT * FROM Users HWERE id=1
    • 查詢Name為Jone的資料,SELECT * FROM Users HWERE Jone='Jone'

修改資料與刪除資料:
  • 修改資料可使用UPDATE指令,搭配WHERE子句,可更新符合條件的資料,比如:
    • 更新id為1的資料,UPDATE Users SET Name='KH' WHERE id=1
  • 刪除資料可使用DELETE指令,搭配WHERE子句,可刪除符合條件的資料
    • 更新id為1的資料,DELETE Users WHERE id=1

更多SQLite資訊:

更多的FMDB資訊: