sqlite的应用实例
发布时间:2020-12-12 19:40:32 所属栏目:百科 来源:网络整理
导读:sqlite 的介绍: sqlite是c语言写的一个开源库,它实现的是一个开源的自自包含的SQL关系型的数据库引擎,可以使用sqlite存储大量关联数据。可以嵌入到iPhone或者ipad的设备上面。 优点: 1、sqlite是一个完全自包含(独立性比较高)的Sql数据库引擎, 1)所以
sqlite 的介绍:
sqlite是c语言写的一个开源库,它实现的是一个开源的自自包含的SQL关系型的数据库引擎,可以使用sqlite存储大量关联数据。可以嵌入到iPhone或者ipad的设备上面。 优点: 1、sqlite是一个完全自包含(独立性比较高)的Sql数据库引擎, 1)所以所有的数据库数据都被存储在一个单独的、跨平台的磁盘中; 2)它需要几个外部库和一点点的操作系统的支持。 2、sqlite所占用的空间是非常的晓得。大概只是300k 3、sqlite不需要配置、安装以及管理员的过程。 4、sqlite支持了很多的sql的特性,然而还有一些特性没有支持,可以查看官方文档; 区别: core Data:core Data应用程序编程接口(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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |