zoukankan      html  css  js  c++  java
  • 第六十六篇、OC_Sqlite数据库操作

    #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语句当成以结尾的字符串)。
            //第四个参数是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
  • 相关阅读:
    DevOps中的测试实践
    jenkins node js插件使用
    jenkins job执行shell时发现node版本跟实际不一致
    ES大批量写入提高性能的策略
    tomcat参数调优
    mongodb常用查询语法
    千锤百炼软工12.17日自评一篇
    千锤百炼软工12.05-12.12
    千锤百炼软工11.28-12.04
    千锤百炼软工11.20-11.27
  • 原文地址:https://www.cnblogs.com/HJQ2016/p/5986336.html
Copyright © 2011-2022 走看看