sqlite的應用執行個體

來源:互聯網
上載者:User

標籤:sqlite3   模型   資料庫連接   資料庫中擷取資料   資料庫   

sqlite 的介紹:
sqlite是c語言寫的一個開源庫,它實現的是一個開源的自自包含的SQL關係型的資料庫引擎,可以使用sqlite儲存大量關聯資料。可以嵌入到iPhone或者ipad的裝置上面。

優點:
1、sqlite是一個完全自包含(獨立性比較高)的Sql資料庫引擎,
  1)所以所有的資料庫資料都被儲存在一個單獨的、跨平台的磁碟中;
  2)它需要幾個外部庫和一點點的作業系統的支援。
2、sqlite所佔用的空間是非常的曉得。大概只是300k
3、sqlite不需要配置、安裝以及管理員的過程。
4、sqlite支援了很多的sql的特性,然而還有一些特性沒有支援,可以查看官方文檔;

區別:
core Data:core DataAPI(API)被設計用來在ios上儲存資料。擅長管理在裝置上建立資料。
(1)是一個架構,而不是一個關係型資料庫,主要的目的是提供給開發人員一個架構,用來儲存應用程式建立的對象;
(2)可以使用豐富的API集在代碼中操作這些對象,也就是mvc中的模型的建立;
(3)可以使用sqlite以及其他的儲存類型作為資料的後台儲存(但:注意它不是關係型資料庫的實現)。
(4)它不是以開發人員直接存取儲存。如果只需持久化應用程式使用期間使用期間建立的對象,則應該考慮使用core Data。

sqlite:當需要積極式載入具有大量資料的應用程式的時候,sqlite表現就比較突出。eg:地圖上的GPS功能,這些表現為預先載入比較強烈的功能。如果需要使用關係型資料庫儲存的功能,應該考慮直接使用sqlite,

有關sqlite3中的一些詳細內容的引用:
1、sqlite3 catalog.db 啟動sqlite3工具,並且建立了一個catalog.db的資料庫
2、attach database 命令 、附加現有的資料庫到sqlite工具 、或者指定的檔案不存在的時候建立資料庫
3、可以附加多個資料庫大一個命令列工具執行個體,並且以資料庫名稱.表名稱的格式使用點符號在每一個資料庫中引用資料
4、可以將一個資料從一個資料庫遷移到另外一個資料庫中。

sqlite中存在很多元命令(metacommmands),用來控制工具自身。
eg:sqlite中以“.”符號執行的元命令是不需要“;”符號結束的。可以在進入sqlite的環境下之後執行 .help 來查看命令。
而一些其他語句沒有以“.”符號開始的時候,就需要“;”符號結束。

xcode中使用sqlite3資料庫:
0、添加所需要的架構libsqlite3.0.dylib ,這個動態庫整合了想所有的sqlite的操作,顯示介面。
1、添加資料庫,eg:添加catalog.db 到xcode項目的suport的目錄下。
2、建立模型,eg:對應著資料庫中的表,然後就是建立和資料庫職工的欄位一樣的名字的屬性,這樣不容易出現錯誤。轉化不用那麼麻煩。(屬性  <——————> 欄位)它們之間一一對應。
3、建立串連資料庫的底層類,並且建立擷取資料,修改資料的等等方法,這裡需要調用資料庫sqlite的介面的方法。

聲明:下面的代碼是引用別人的:

代碼:

  啟動並執行結果圖:

下面是程式中主要的代碼:

模型product的代碼:

product.h 的檔案愛你#import <Foundation/Foundation.h>//這個就是模型類,對應這資料庫中的屬性欄位。@interface Product : NSObject {    int ID;    NSString* name;    NSString* manufacturer;    NSString* details;    float price;    int quantity;    NSString* countryOfOrigin;    NSString* image;}@property (nonatomic) int ID;@property (strong, nonatomic) NSString *name;@property (strong, nonatomic) NSString *manufacturer;@property (strong, nonatomic) NSString *details;@property (nonatomic) float price;@property (nonatomic) int quantity;@property (strong, nonatomic) NSString *countryOfOrigin;@property (strong, nonatomic) NSString *image;@end

product.m檔案,尤其這樣實現是為了和在欄位中的屬性名稱字對應。#import "Product.h"@implementation Product@synthesize ID;@synthesize name;@synthesize manufacturer;@synthesize details;@synthesize price;@synthesize quantity;@synthesize countryOfOrigin;@synthesize image;@end

下面是DBAccess類的代碼:

DBAccess.h檔案。#import <Foundation/Foundation.h>// This includes the header for the SQLite library.#import <sqlite3.h>#import "Product.h"//用來擷取資料庫中的資料,添加到模型中庫@interface DBAccess : NSObject {        }//擷取的數組方法- (NSMutableArray*) getAllProducts;//關閉資料庫- (void) closeDatabase;//初始化資料庫,包括開啟資料庫- (void)initializeDatabase;@end

DBAccess.m檔案。#import "DBAccess.h"@implementation DBAccess// Reference to the SQLite database.sqlite3* database;//初始化方法,整合NSObject類,啟動的時候就會調用這個方法。-(id) init{    if ((self = [super init]))    {        [self initializeDatabase];    }    return self;}// 擷取資料庫檔案、開啟、串連- (void)initializeDatabase {        // Get the database from the application bundle.    NSString *path = [[NSBundle mainBundle]                      pathForResource:@"catalog"                      ofType:@"db"];        // Open the database.    if (sqlite3_open([path UTF8String], &database) == SQLITE_OK)    {        NSLog(@"Opening Database");    }    else    {        // Call close to properly clean up        sqlite3_close(database);        NSAssert1(0, @"Failed to open database: ‘%s’.",                  sqlite3_errmsg(database));    }}//關閉資料庫-(void) closeDatabase{    // Close the database.    if (sqlite3_close(database) != SQLITE_OK) {        NSAssert1(0, @"Error: failed to close database: ‘%s’.",                  sqlite3_errmsg(database));    }}//擷取資料庫中product的所有記錄儲存到數組中- (NSMutableArray*) getAllProducts{    NSLog(@"擷取資料");    //  The array of products that we will create    NSMutableArray *products = [[NSMutableArray alloc] init];    //  The SQL statement that we plan on executing against the database    const char *sql = "SELECT product.ID,product.Name,     Manufacturer.name,product.details,product.price,    product.quantityonhand, country.country,     product.image FROM Product,Manufacturer,     Country where manufacturer.manufacturerid=product.manufacturerid     and product.countryoforiginid=country.countryid";    //  The SQLite statement object that will hold our result set    sqlite3_stmt *statement;        // Prepare the statement to compile the SQL query into byte-code    int sqlResult = sqlite3_prepare_v2(database, sql, -1, &statement, NULL);    if ( sqlResult== SQLITE_OK) {        // Step through the results - once for each row.        //#define SQLITE_ROW   sqlite3_step() has another row ready        while (sqlite3_step(statement) == SQLITE_ROW) {            //  allocate a Product object to add to products array            Product  *product = [[Product alloc] init];            // The second parameter is the column index (0 based) in            // the result set.            char *name = (char *)sqlite3_column_text(statement, 1);            char *manufacturer = (char *)sqlite3_column_text(statement, 2);            char *details = (char *)sqlite3_column_text(statement, 3);            char *countryOfOrigin = (char *)sqlite3_column_text(statement, 6);            char *image = (char *)sqlite3_column_text(statement, 7);                        //  Set all the attributes of the product            product.ID = sqlite3_column_int(statement, 0);            product.name = (name) ? [NSString stringWithUTF8String:name] : @"";            product.manufacturer = (manufacturer) ? [NSString                                                     stringWithUTF8String:manufacturer] : @"";            product.details = (details) ? [NSString stringWithUTF8String:details] : @"";            product.price = sqlite3_column_double(statement, 4);            product.quantity = sqlite3_column_int(statement, 5);            product.countryOfOrigin = (countryOfOrigin) ? [NSString                                                           stringWithUTF8String:countryOfOrigin] : @"";            product.image = (image) ? [NSString stringWithUTF8String:image] : @"";                        // 將產品添加到Products數組中並且移到下一行            [products addObject:product];        }        //釋放和編譯器語句有關的資源        sqlite3_finalize(statement);    }    else {        NSLog(@"Problem with the database:");        NSLog(@"%d",sqlResult);    }    return products;}@end 


上面的兩個類只要是建立資料庫在應用中的模型,並且串連資料庫擷取資料庫中相應的操作。

在Controller中使用來顯示在View中的代碼:

- (void)viewDidLoad{    [super viewDidLoad];        DBAccess *dbAccess = [[DBAccess alloc] init];        self.products = [dbAccess getAllProducts]; //前面應該定義了products這個屬性。        [dbAccess closeDatabase];    }

原始碼下載串連:

http://www.wrox.com/WileyCDA/WroxTitle/Professional-iOS-Database-Application-Programming-2nd-Edition.productCd-1118391845,descCd-DOWNLOAD.html

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

sqlite的應用執行個體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.