标签:sqlite3 模型 数据库连接 数据库中获取数据 数据库
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
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:sqlite3 模型 数据库连接 数据库中获取数据 数据库
原文地址:http://blog.csdn.net/u012496940/article/details/47809311