#import <Foundation/Foundation.h> #import <sqlite3.h> #define kFilename @"data.sqlite" @interface SQLService:NSObject { NSMutableArray *FSQLExecutioResultsMutableArray; //SQL运行结果 NSString *FErrorString; //错误信息 NSString *FDatabaseAddressString; //数据库文件存放地址 } @property (nonatomic) sqlite3 *FDatabaseSqlite; - (void)SetDatabaseAddressString:(NSString *)ANewString; - (NSString *)GetErrorString; - (NSMutableArray *)GetSQLExecutioResultsMutableArray; //- (BOOL)ExecuteSQL:(NSString *)ASQLString; - (BOOL)CreateTable:(NSString *)ASQLString; - (BOOL)InsertData:(NSString *)ASQLString; - (BOOL)DeleteData:(NSString *)ASQLString; - (BOOL)UpdateData:(NSString *)ASQLString; - (BOOL)SelectData:(NSString *)ASQLString; - (BOOL)SelectAllData:(NSString *)ASQLString; - (BOOL)DropTable:(NSString *)ASQLString; @end
#import "SQLService.h" #define kLibrary [NSHomeDirectory() stringByAppendingPathComponent:@"Library"] @interface SQLService () - (void)SetErrorString:(NSString *)ANewString; - (void)SetSQLExecutioResultsMutableArray:(NSMutableArray *)ANewMutableArray; - (NSString *)GetDatabaseAddressString; - (NSString *)DataFilePath; - (BOOL)OpenDataBase; - (BOOL)CreateTable:(NSString *)ASQLString; @end @implementation SQLService @synthesize FDatabaseSqlite; - (id)init { if (![self GetSQLExecutioResultsMutableArray]) { NSMutableArray *ASQLExecutioResultsMutableArray = [[NSMutableArray alloc] initWithCapacity:1]; [self SetSQLExecutioResultsMutableArray:ASQLExecutioResultsMutableArray]; [ASQLExecutioResultsMutableArray release]; } if (![self GetErrorString]) { NSString *AErrorString = [[NSString alloc] init]; [self SetErrorString:AErrorString]; [AErrorString release]; } return self; } - (void)dealloc { [FSQLExecutioResultsMutableArray release]; [super dealloc]; } - (void)SetDatabaseAddressString:(NSString *)ANewString { FDatabaseAddressString = [ANewString retain]; } - (NSString *)GetDatabaseAddressString { return FDatabaseAddressString; } - (void)SetErrorString:(NSString *)ANewString { if (FErrorString != ANewString) { [FErrorString release]; FErrorString = [ANewString retain]; } } - (NSString *)GetErrorString { return FErrorString; } - (void)SetSQLExecutioResultsMutableArray:(NSMutableArray *)ANewMutableArray { if (FSQLExecutioResultsMutableArray != ANewMutableArray) { [FSQLExecutioResultsMutableArray release]; FSQLExecutioResultsMutableArray = [ANewMutableArray retain]; } } - (NSMutableArray *)GetSQLExecutioResultsMutableArray { return FSQLExecutioResultsMutableArray; } //获取document目录并返回数据库目录 - (NSString *)DataFilePath { NSString *ADataFilePathString; ADataFilePathString = [kLibrary stringByAppendingPathComponent:kFilename]; return ADataFilePathString; } //创建、打开数据库 - (BOOL)OpenDataBase { BOOL AIsOpenSuccessedBool; //获取数据库路径 NSString *ADataFilePathString = [self DataFilePath]; //文件管理器 NSFileManager *AFileManager = [NSFileManager defaultManager]; //判断数据库是否存在 BOOL AIsDataBaseExistBool = [AFileManager fileExistsAtPath:ADataFilePathString]; //如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建) if (AIsDataBaseExistBool) { // NSLog(@"Database file have already existed."); //打开数据库,这里的[path UTF8String]是将NSString转换为C字符串,因为SQLite3是采用可移植的C(而不是 //Objective-C)编写的,它不知道什么是NSString. const char *ATempChar = [ADataFilePathString UTF8String]; if(sqlite3_open(ATempChar, &FDatabaseSqlite) != SQLITE_OK) { //如果打开数据库失败则关闭数据库 sqlite3_close(FDatabaseSqlite); //NSLog(@"Error: open database file failed."); [self SetErrorString:@"Error: open database file failed."]; AIsOpenSuccessedBool = NO; } else { AIsOpenSuccessedBool = YES; } } //如果发现数据库不存在则利用sqlite3_open创建数据库(上面已经提到过),与上面相同,路径要转换为C字符串 else if(sqlite3_open([ADataFilePathString UTF8String], &FDatabaseSqlite) == SQLITE_OK) { AIsOpenSuccessedBool = YES; } else { //如果创建并打开数据库失败则关闭数据库 sqlite3_close(FDatabaseSqlite); //NSLog(@"Error: create and open database file failed."); [self SetErrorString:@"Error: create and open database file failed."]; AIsOpenSuccessedBool = NO; } return AIsOpenSuccessedBool; } /* - (BOOL)ExecuteSQL:(NSString *)ASQLString { BOOL AIsSuccessedBool; if ([self OpenDataBase]) { sqlite3_stmt *AStatementSqlite3_stmt; NSString *AErrorString = nil; NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; [ASQLExecutioResultsMutableArray removeAllObjects]; const char *ASQLChar = [ASQLString UTF8String]; //sqlite3_prepare_v2 接口把一条SQL语句解析到statement结构里去. 使用该接口访问数据库是当前比较好的的一种方法 NSInteger AParseSQLReturnInteger = sqlite3_prepare_v2(FDatabaseSqlite, ASQLChar, -1, &AStatementSqlite3_stmt, nil); //第一个参数跟前面一样,是个sqlite3 * 类型变量, //第二个参数是一个 sql 语句。 //第三个参数我写的是-1,这个参数含义是前面 sql 语句的长度。如果小于0,sqlite会自动计算它的长度(把sql语句当成以\0结尾的字符串)。 //第四个参数是sqlite3_stmt 的指针的指针。解析以后的sql语句就放在这个结构里。 //第五个参数我也不知道是干什么的。为nil就可以了。 //如果这个函数执行成功(返回值是 SQLITE_OK 且 statement 不为NULL ),那么下面就可以开始插入二进制数据。 //如果SQL语句解析出错 if(AParseSQLReturnInteger != SQLITE_OK) { //NSLog(@"Error: Parse SQL failed"); AIsSuccessedBool = NO; AErrorString = [[NSString alloc] initWithFormat:@"Error: %s", sqlite3_errmsg(FDatabaseSqlite)]; [self SetErrorString:AErrorString]; [AErrorString release]; } else { NSString *AOperationString = [ASQLString substringToIndex:6]; if ([AOperationString caseInsensitiveCompare:@"create"] == NSOrderedSame) { [self CreateTable:ASQLChar Statement:AStatementSqlite3_stmt]; } else if ([AOperationString caseInsensitiveCompare:@"INSERT"] == NSOrderedSame) { [self InsertData:ASQLChar Statement:AStatementSqlite3_stmt]; } else if ([AOperationString caseInsensitiveCompare:@"delete"] == NSOrderedSame) { [self DeleteData:ASQLChar Statement:AStatementSqlite3_stmt]; } else if ([AOperationString caseInsensitiveCompare:@"update"] == NSOrderedSame) { [self UpdateData:ASQLChar Statement:AStatementSqlite3_stmt]; } else if ([AOperationString caseInsensitiveCompare:@"SELECT"] == NSOrderedSame) { [self SelectData:ASQLChar Statement:AStatementSqlite3_stmt]; } else if ([[AOperationString substringToIndex:4] caseInsensitiveCompare:@"drop"] == NSOrderedSame) { [self DropTable:ASQLChar Statement:AStatementSqlite3_stmt]; } AIsSuccessedBool = YES; } //释放sqlite3_stmt sqlite3_finalize(AStatementSqlite3_stmt); //关闭数据库 sqlite3_close(FDatabaseSqlite); } return AIsSuccessedBool; } */ - (BOOL)CreateTable:(NSString *)ASQLString { BOOL AIsSuccessedBool=NO; if ([self OpenDataBase]) { // NSLog(@"CreateTable%@",ASQLString); sqlite3_stmt *AStatementSqlite3_stmt; NSString *AErrorString = nil; NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; [ASQLExecutioResultsMutableArray removeAllObjects]; const char *ASQLChar = [ASQLString UTF8String]; //sqlite3_prepare_v2 接口把一条SQL语句解析到statement结构里去. 使用该接口访问数据库是当前比较好的的一种方法 NSInteger AParseSQLReturnInteger = sqlite3_prepare_v2(FDatabaseSqlite, ASQLChar, -1, &AStatementSqlite3_stmt, nil); //如果SQL语句解析出错 if(AParseSQLReturnInteger != SQLITE_OK) { //NSLog(@"Error: Parse SQL failed"); AIsSuccessedBool = NO; AErrorString = [[NSString alloc] initWithFormat:@"Error: %s", sqlite3_errmsg(FDatabaseSqlite)]; [self SetErrorString:AErrorString]; [AErrorString release]; } else { //执行SQL语句 int AExecuteSQLReturnInt = sqlite3_step(AStatementSqlite3_stmt); if (AExecuteSQLReturnInt != SQLITE_DONE) { AErrorString = [[NSString alloc] initWithFormat:@"Create Table failed!"]; [self SetErrorString:AErrorString]; [AErrorString release]; AIsSuccessedBool = NO; } else { [self SetErrorString:@"Create Table Successed"]; AIsSuccessedBool = YES; } } //释放sqlite3_stmt sqlite3_finalize(AStatementSqlite3_stmt); //关闭数据库 sqlite3_close(FDatabaseSqlite); } return AIsSuccessedBool; } - (BOOL)InsertData:(NSString *)ASQLString { BOOL AIsSuccessedBool=NO; if ([self OpenDataBase]) { sqlite3_stmt *AStatementSqlite3_stmt; NSString *AErrorString = nil; NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; [ASQLExecutioResultsMutableArray removeAllObjects]; const char *ASQLChar = [ASQLString UTF8String]; //sqlite3_prepare_v2 接口把一条SQL语句解析到statement结构里去. 使用该接口访问数据库是当前比较好的的一种方法 NSInteger AParseSQLReturnInteger = sqlite3_prepare_v2(FDatabaseSqlite, ASQLChar, -1, &AStatementSqlite3_stmt, nil); //如果SQL语句解析出错 if(AParseSQLReturnInteger != SQLITE_OK) { //NSLog(@"Error: Parse SQL failed"); AIsSuccessedBool = NO; AErrorString = [[NSString alloc] initWithFormat:@"Error: %s", sqlite3_errmsg(FDatabaseSqlite)]; [self SetErrorString:AErrorString]; [AErrorString release]; } else { //执行SQL语句 int AExecuteSQLReturnInt = sqlite3_step(AStatementSqlite3_stmt); if (AExecuteSQLReturnInt == SQLITE_ERROR) { AErrorString = [[NSString alloc] initWithFormat:@"Insert Data failed!"]; [self SetErrorString:AErrorString]; [AErrorString release]; AIsSuccessedBool = NO; } else { [self SetErrorString:@"Insert Data Successed"]; AIsSuccessedBool = YES; } } //释放sqlite3_stmt sqlite3_finalize(AStatementSqlite3_stmt); //关闭数据库 sqlite3_close(FDatabaseSqlite); } return AIsSuccessedBool; } - (BOOL)DeleteData:(NSString *)ASQLString { BOOL AIsSuccessedBool=NO; if ([self OpenDataBase]) { sqlite3_stmt *AStatementSqlite3_stmt; NSString *AErrorString = nil; NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; [ASQLExecutioResultsMutableArray removeAllObjects]; const char *ASQLChar = [ASQLString UTF8String]; //sqlite3_prepare_v2 接口把一条SQL语句解析到statement结构里去. 使用该接口访问数据库是当前比较好的的一种方法 NSInteger AParseSQLReturnInteger = sqlite3_prepare_v2(FDatabaseSqlite, ASQLChar, -1, &AStatementSqlite3_stmt, nil); //如果SQL语句解析出错 if(AParseSQLReturnInteger != SQLITE_OK) { //NSLog(@"Error: Parse SQL failed"); AIsSuccessedBool = NO; AErrorString = [[NSString alloc] initWithFormat:@"Error: %s", sqlite3_errmsg(FDatabaseSqlite)]; [self SetErrorString:AErrorString]; [AErrorString release]; } else { //执行SQL语句 int AExecuteSQLReturnInt = sqlite3_step(AStatementSqlite3_stmt); if (AExecuteSQLReturnInt == SQLITE_ERROR) { AErrorString = [[NSString alloc] initWithFormat:@"Delete Data failed!"]; [self SetErrorString:AErrorString]; [AErrorString release]; AIsSuccessedBool = NO; } else { [self SetErrorString:@"Delete Data Successed"]; AIsSuccessedBool = YES; } } //释放sqlite3_stmt sqlite3_finalize(AStatementSqlite3_stmt); //关闭数据库 sqlite3_close(FDatabaseSqlite); } return AIsSuccessedBool; } - (BOOL)UpdateData:(NSString *)ASQLString { BOOL AIsSuccessedBool=NO; if ([self OpenDataBase]) { sqlite3_stmt *AStatementSqlite3_stmt; NSString *AErrorString = nil; NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; [ASQLExecutioResultsMutableArray removeAllObjects]; const char *ASQLChar = [ASQLString UTF8String]; //sqlite3_prepare_v2 接口把一条SQL语句解析到statement结构里去. 使用该接口访问数据库是当前比较好的的一种方法 NSInteger AParseSQLReturnInteger = sqlite3_prepare_v2(FDatabaseSqlite, ASQLChar, -1, &AStatementSqlite3_stmt, nil); //如果SQL语句解析出错 if(AParseSQLReturnInteger != SQLITE_OK) { //NSLog(@"Error: Parse SQL failed"); AIsSuccessedBool = NO; AErrorString = [[NSString alloc] initWithFormat:@"Error: %s", sqlite3_errmsg(FDatabaseSqlite)]; [self SetErrorString:AErrorString]; [AErrorString release]; } else { //执行SQL语句 int AExecuteSQLReturnInt = sqlite3_step(AStatementSqlite3_stmt); if (AExecuteSQLReturnInt == SQLITE_ERROR) { AErrorString = [[NSString alloc] initWithFormat:@"Update Data failed!"]; [self SetErrorString:AErrorString]; [AErrorString release]; AIsSuccessedBool = NO; } else { [self SetErrorString:@"Update Data Successed"]; AIsSuccessedBool = YES; } } //释放sqlite3_stmt sqlite3_finalize(AStatementSqlite3_stmt); //关闭数据库 sqlite3_close(FDatabaseSqlite); } return AIsSuccessedBool; } - (BOOL)SelectData:(NSString *)ASQLString { BOOL AIsSuccessedBool=NO; if ([self OpenDataBase]) { sqlite3_stmt *AStatementSqlite3_stmt; NSString *AErrorString = nil; NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; [ASQLExecutioResultsMutableArray removeAllObjects]; const char *ASQLChar = [ASQLString UTF8String]; //sqlite3_prepare_v2 接口把一条SQL语句解析到statement结构里去. 使用该接口访问数据库是当前比较好的的一种方法 NSInteger AParseSQLReturnInteger = sqlite3_prepare_v2(FDatabaseSqlite, ASQLChar, -1, &AStatementSqlite3_stmt, nil); //如果SQL语句解析出错 if(AParseSQLReturnInteger != SQLITE_OK) { //NSLog(@"Error: Parse SQL failed"); AIsSuccessedBool = NO; AErrorString = [[NSString alloc] initWithFormat:@"Error: %s", sqlite3_errmsg(FDatabaseSqlite)]; [self SetErrorString:AErrorString]; [AErrorString release]; } else { NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; char *ATempChar; NSUInteger ANumberOLineDatasUInteger; //每行数据个数 NSUInteger AIndexUInteger; NSString *ATempString; //NSUInteger ASqliteColumnTypeUInteger; //某列数据类型 //执行SQL语句 while (sqlite3_step(AStatementSqlite3_stmt) == SQLITE_ROW) { ANumberOLineDatasUInteger = sqlite3_column_count(AStatementSqlite3_stmt); for (AIndexUInteger = 0; AIndexUInteger < ANumberOLineDatasUInteger; AIndexUInteger++) { ATempChar = (char*)sqlite3_column_text(AStatementSqlite3_stmt, AIndexUInteger); if (ATempChar!=nil) { ATempString=[[NSString alloc] initWithCString:ATempChar encoding:NSUTF8StringEncoding]; } else { ATempString=[[NSString alloc] initWithFormat:@""]; } [ASQLExecutioResultsMutableArray addObject:ATempString]; [ATempString release]; } } AIsSuccessedBool = YES; } //释放sqlite3_stmt sqlite3_finalize(AStatementSqlite3_stmt); //关闭数据库 sqlite3_close(FDatabaseSqlite); } return AIsSuccessedBool; } - (BOOL)SelectAllData:(NSString *)ASQLString { BOOL AIsSuccessedBool=NO; if ([self OpenDataBase]) { sqlite3_stmt *AStatementSqlite3_stmt; NSString *AErrorString = nil; NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; [ASQLExecutioResultsMutableArray removeAllObjects]; const char *ASQLChar = [ASQLString UTF8String]; //sqlite3_prepare_v2 接口把一条SQL语句解析到statement结构里去. 使用该接口访问数据库是当前比较好的的一种方法 NSInteger AParseSQLReturnInteger = sqlite3_prepare_v2(FDatabaseSqlite, ASQLChar, -1, &AStatementSqlite3_stmt, nil); //如果SQL语句解析出错 if(AParseSQLReturnInteger != SQLITE_OK) { //NSLog(@"Error: Parse SQL failed"); AIsSuccessedBool = NO; AErrorString = [[NSString alloc] initWithFormat:@"Error: %s", sqlite3_errmsg(FDatabaseSqlite)]; [self SetErrorString:AErrorString]; [AErrorString release]; } else { NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; char *ATempChar; NSUInteger ANumberOLineDatasUInteger; //每行数据个数 NSUInteger AIndexUInteger; NSString *ATempString; //NSUInteger ASqliteColumnTypeUInteger; //某列数据类型 //执行SQL语句 while (sqlite3_step(AStatementSqlite3_stmt) == SQLITE_ROW) { ANumberOLineDatasUInteger = sqlite3_column_count(AStatementSqlite3_stmt); NSMutableArray *ARowMutableArray=[[NSMutableArray alloc] initWithCapacity:1]; for (AIndexUInteger = 0; AIndexUInteger < ANumberOLineDatasUInteger; AIndexUInteger++) { ATempChar = (char*)sqlite3_column_text(AStatementSqlite3_stmt, AIndexUInteger); if (ATempChar!=nil) { ATempString=[[NSString alloc] initWithCString:ATempChar encoding:NSUTF8StringEncoding]; } else { ATempString=[[NSString alloc] initWithFormat:@""]; } [ARowMutableArray addObject:ATempString]; [ATempString release]; } [ASQLExecutioResultsMutableArray addObject:ARowMutableArray]; [ARowMutableArray release]; } AIsSuccessedBool = YES; } //释放sqlite3_stmt sqlite3_finalize(AStatementSqlite3_stmt); //关闭数据库 sqlite3_close(FDatabaseSqlite); } return AIsSuccessedBool; } - (BOOL)DropTable:(NSString *)ASQLString { BOOL AIsSuccessedBool=NO; if ([self OpenDataBase]) { sqlite3_stmt *AStatementSqlite3_stmt; NSString *AErrorString = nil; NSMutableArray *ASQLExecutioResultsMutableArray = [self GetSQLExecutioResultsMutableArray]; [ASQLExecutioResultsMutableArray removeAllObjects]; const char *ASQLChar = [ASQLString UTF8String]; //sqlite3_prepare_v2 接口把一条SQL语句解析到statement结构里去. 使用该接口访问数据库是当前比较好的的一种方法 NSInteger AParseSQLReturnInteger = sqlite3_prepare_v2(FDatabaseSqlite, ASQLChar, -1, &AStatementSqlite3_stmt, nil); //如果SQL语句解析出错 if(AParseSQLReturnInteger != SQLITE_OK) { //NSLog(@"Error: Parse SQL failed"); AIsSuccessedBool = NO; AErrorString = [[NSString alloc] initWithFormat:@"Error: %s", sqlite3_errmsg(FDatabaseSqlite)]; [self SetErrorString:AErrorString]; [AErrorString release]; } else { //执行SQL语句 int AExecuteSQLReturnInt = sqlite3_step(AStatementSqlite3_stmt); if (AExecuteSQLReturnInt == SQLITE_ERROR) { AErrorString = [[NSString alloc] initWithFormat:@"Drop Table failed!"]; [self SetErrorString:AErrorString]; [AErrorString release]; AIsSuccessedBool = NO; } else { [self SetErrorString:@"Drop Table Successed"]; AIsSuccessedBool = YES; } } //释放sqlite3_stmt sqlite3_finalize(AStatementSqlite3_stmt); //关闭数据库 sqlite3_close(FDatabaseSqlite); } return AIsSuccessedBool; } @end
使用代码:
#import <Foundation/Foundation.h> #import "SqlService/SQLService.h" @interface OperatingTheCartTable : NSObject { } /*Cart 表字段 Id ProductId 产品ID ProductName 产品名臣 Price 价格 Quantity 数量 ProductColor 产品颜色 ProductSize 产品尺寸 ProductSellAttributeId 产品销售属性ID */ +(NSInteger)GetNumberOfProduct; +(BOOL)CreateCartTable; +(NSMutableArray *)SelectFromCartTable; +(NSMutableArray *)SelectFromCartTableWith:(NSInteger)AProductIdInteger; +(BOOL)DeleteFromCartTable:(NSInteger)AIDInteger ProductSellAttributeId:(NSInteger)AProductSellAttributeIdInteger; +(BOOL)InsertIntoCartTable:(NSInteger )AProductIdInteger ProductName:(NSString *)ANameString Price:(float )APriceFloat Quantity:(NSInteger)AQuantity ProductColor:(NSString *)AProductColor ProductSize:(NSString *)AProductSize ProductSellAttributeId:(NSInteger)AProductSellAttributeIdInteger; +(BOOL)UpdateTheNumberOfCart:(NSInteger)AIDInteger Quantity:(NSInteger)AQuantityInteger ProductColor:(NSString *)AProductColor ProductSize:(NSString *)AProductSize ProductSellAttributeId:(NSInteger)AProductSellAttributeIdInteger;
#import "OperatingTheCartDatabase.h" #define kLibrary [NSHomeDirectory() stringByAppendingPathComponent:@"Library"] #define KDataBaseName @"Cart.sqlite" @implementation OperatingTheCartTable #pragma mark - 表 Cart +(NSInteger)GetNumberOfProduct { NSInteger ACountInteger=0; SQLService *ASQLService=[[[SQLService alloc] init] autorelease]; NSString *ASelectString=[NSString stringWithFormat:@"select count(*) from Cart"]; [ASQLService SelectData:ASelectString]; NSMutableArray *AMutableArray=[ASQLService GetSQLExecutioResultsMutableArray]; if(AMutableArray.count <= 0) { return 0; } ACountInteger = [[AMutableArray objectAtIndex:0] integerValue]; return ACountInteger; } //ProductSellAttributeId +(BOOL)CreateCartTable { SQLService *ASQLService=[[SQLService alloc] init]; NSString *ACreateBOOKSetingTable=[NSString stringWithFormat:@"create table if not exists Cart(Id INTEGER PRIMARY KEY autoincrement,ProductId INTEGER,ProductName nvarchar(250),Price float,Quantity INTEGER,ProductColor nvarchar(250),ProductSize nvarchar(250),ProductSellAttributeId INTEGER)"]; if(![ASQLService CreateTable:ACreateBOOKSetingTable]) { NSLog(@"创建表失败%@",[ASQLService GetErrorString]); [ASQLService release]; return NO; } [ASQLService release]; return YES; } +(NSMutableArray *)SelectFromCartTable { SQLService *ASQLService=[[[SQLService alloc] init] autorelease]; NSString *ASelectString=[NSString stringWithFormat:@"select * from Cart order by Id DESC"]; [ASQLService SelectAllData:ASelectString]; NSMutableArray *AMutableArray=[ASQLService GetSQLExecutioResultsMutableArray]; for (int i=0; i<AMutableArray.count; i++) { NSMutableDictionary *AMutableDictionary=[[NSMutableDictionary alloc] initWithCapacity:1]; NSMutableArray *ATempMutableArray=[AMutableArray objectAtIndex:i]; [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:1]forKey:@"ProductId"]; [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:2]forKey:@"ProductName"]; [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:3]forKey:@"Price"]; [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:4]forKey:@"Quantity"]; if ([ATempMutableArray count] >= 6) [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:5]forKey:@"ProductColor"]; if ([ATempMutableArray count] >= 7) [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:6]forKey:@"ProductSize"]; if ([ATempMutableArray count] >= 8) [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:7]forKey:@"ProductSellAttributeId"]; [AMutableArray replaceObjectAtIndex:i withObject:AMutableDictionary]; [AMutableDictionary release]; } return AMutableArray; } //2013-10-31 11:41:57.457 CloudWork[2565:1a903] 红色,39,281 //2013-10-31 11:41:57.457 CloudWork[2565:1a903] 红色,37,278 +(NSMutableArray *)SelectFromCartTableWith:(NSInteger)AProductIdInteger { SQLService *ASQLService=[[[SQLService alloc] init] autorelease]; NSString *ASelectString=[NSString stringWithFormat:@"select * from Cart where ProductId=%d order by Id desc",AProductIdInteger]; [ASQLService SelectAllData:ASelectString]; NSMutableArray *AMutableArray=[ASQLService GetSQLExecutioResultsMutableArray]; for (int i=0; i<AMutableArray.count; i++) { NSMutableDictionary *AMutableDictionary=[[NSMutableDictionary alloc] initWithCapacity:1]; NSMutableArray *ATempMutableArray=[AMutableArray objectAtIndex:i]; [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:1]forKey:@"ProductId"]; [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:2]forKey:@"ProductName"]; [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:3]forKey:@"Price"]; [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:4]forKey:@"Quantity"]; if ([ATempMutableArray count] >= 6) [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:5]forKey:@"ProductColor"]; if ([ATempMutableArray count] >= 7) [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:6]forKey:@"ProductSize"]; if ([ATempMutableArray count] >= 8) [AMutableDictionary setValue:[ATempMutableArray objectAtIndex:7]forKey:@"ProductSellAttributeId"]; [AMutableArray replaceObjectAtIndex:i withObject:AMutableDictionary]; NSLog(@",%@,%@,%@,%@",[AMutableDictionary valueForKey:@"Quantity"],[AMutableDictionary valueForKey:@"ProductColor"],[AMutableDictionary valueForKey:@"ProductSize"],[AMutableDictionary valueForKey:@"ProductSellAttributeId"]); [AMutableDictionary release]; } return AMutableArray; } +(BOOL)DeleteFromCartTable:(NSInteger)AIDInteger ProductSellAttributeId:(NSInteger)AProductSellAttributeIdInteger { BOOL ABOOL=NO; NSString *ADeleteString=[NSString stringWithFormat:@"delete from Cart where ProductId=%d and ProductSellAttributeId=%d",AIDInteger,AProductSellAttributeIdInteger]; SQLService *ASQLService=[[SQLService alloc] init]; if([ASQLService DeleteData:ADeleteString]) { ABOOL=YES; } else { ABOOL=NO; } [ASQLService release]; return ABOOL; } +(BOOL)InsertIntoCartTable:(NSInteger )AProductIdInteger ProductName:(NSString *)ANameString Price:(float )APriceFloat Quantity:(NSInteger)AQuantity ProductColor:(NSString *)AProductColor ProductSize:(NSString *)AProductSize ProductSellAttributeId:(NSInteger)AProductSellAttributeIdInteger { BOOL ABOOL=NO; NSString *AInsertString=[NSString stringWithFormat:@"insert into Cart(ProductId,ProductName,Price,Quantity,ProductColor,ProductSize,ProductSellAttributeId) values(%d,‘%@‘,%f,%d,‘%@‘,‘%@‘,%d)",AProductIdInteger,ANameString,APriceFloat,AQuantity,AProductColor,AProductSize,AProductSellAttributeIdInteger]; SQLService *ASQLService=[[SQLService alloc] init]; if([ASQLService InsertData:AInsertString]) { ABOOL=YES; } else { ABOOL=NO; } [ASQLService release]; return ABOOL; } +(BOOL)UpdateTheNumberOfCart:(NSInteger)AIDInteger Quantity:(NSInteger)AQuantityInteger ProductColor:(NSString *)AProductColor ProductSize:(NSString *)AProductSize ProductSellAttributeId:(NSInteger)AProductSellAttributeIdInteger { BOOL ABOOL=NO; NSString *AUpdateString=[NSString stringWithFormat:@"update Cart set Quantity=%d,ProductColor=‘%@‘,ProductSize=‘%@‘ where ProductId=%d and ProductSellAttributeId=%d",AQuantityInteger,AProductColor,AProductSize,AIDInteger,AProductSellAttributeIdInteger]; SQLService *ASQLService=[[SQLService alloc] init]; if ([ASQLService UpdateData:AUpdateString]) { ABOOL=YES; } else { ABOOL=NO; } [ASQLService release]; return ABOOL; } @end
原文:http://www.cnblogs.com/HJQ2016/p/5986336.html