在SQLIte文件中向表中添加记录将不起作用

时间:2015-11-16 08:42:34

标签: ios objective-c sqlite

我正在尝试将记录添加到SQLite文件但没有任何反应。我没有得到任何错误,在控制台中,我将该记录插入到表@"----> RECORD INSERTED"中。您可以在下面看到我正在使用的代码。请有人告诉我如何解决这个问题。感谢您的时间和帮助。

- (void)addRecordToSQLiteDatabase
{
   BOOL success;
   NSFileManager *fileManager = [NSFileManager defaultManager];
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *documentsDirectory = [paths objectAtIndex:0];
   NSString *appDBPath = [documentsDirectory stringByAppendingPathComponent:@"ProductiivData.sqlite"];
   success = [fileManager fileExistsAtPath:appDBPath];

   if (success) 
   {
       const char *databaseCharPath = [appDBPath UTF8String];
       if (sqlite3_open(databaseCharPath, &(database)) == SQLITE_OK)
       {
           char *errorInsert;
           const char *insertRecordInPROJECT = "insert into PROJECT values (139, 'TEST1888799')";

           if (sqlite3_exec(database, insertRecordInPROJECT, NULL, NULL, &errorInsert))
           {
               NSLog(@"----> RECORD INSERTED");
           }
           else
           {
               NSLog(@"----> RECORD NOT INSERTED -- Error: %s", errorInsert);
           }

           char *errorSelectAll;
           sqlite3_stmt *statement = NULL;
           const char *allRecordsFromPROJECT = "select * from PROJECT";

           if (sqlite3_prepare_v2(database, allRecordsFromPROJECT, 1, &statement, NULL) == SQLITE_OK)
           {
                while (sqlite3_step(statement) == SQLITE_ROW)
                {
                    NSString *projectName = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(statement, 2)];
                }
           }
           else
           {
                NSLog(@"----> RECORDS NOT SELECTED -- Error: %s", errorSelectAll);
           }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

单独插入和选择逻辑,请尝试以下代码

获取数据库路径

+ (NSString *)getDBPath
{
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
     NSString *documentsDir = [paths objectAtIndex:0];
     NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"dbName.sqlite"];

     NSFileManager *fileManager = [NSFileManager defaultManager];
     NSError *error;

     BOOL success = [fileManager fileExistsAtPath:dbPath];

     if(!success)
     {
         NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"dbName.sqlite"];
         success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

         if (!success)
             NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }
    return dbPath;
}

插入数据

+ (void)insertData
 {
     const char *dbpath = [[self getDBPath] UTF8String];

     if (sqlite3_open(dbpath, &database) == SQLITE_OK)
     {
         NSString *strSQL = [NSString stringWithFormat:@"INSERT INTO tableName………………."];
         const char *insertQuery = [strSQL UTF8String];
         sqlite3_stmt *insert_stmt;

         if (sqlite3_prepare_v2(database, insertQuery, -1, &insert_stmt, NULL) == SQLITE_OK)
         {
             if (sqlite3_step(insert_stmt) == SQLITE_DONE)
             {
                // Code
             }
             else
             {
                 NSLog(@"error");
             }
         }
         sqlite3_finalize(insert_stmt);
         sqlite3_close(database);
    }
    else
    {
        NSLog(@"Error in opening database.");
    }
}

从表中获取数据

+ (NSArray *)getDataList
{
    NSMutableArray *arrProducts = [[NSMutableArray alloc] init];

    const char *dbpath = [[self getDBPath] UTF8String];

    if (sqlite3_open(dbpath, &database) == SQLITE_OK)
    {
        NSString *strSQL = [NSString stringWithFormat:@"SELECT * FROM tableName"];
        const char *selectQuery = [strSQL UTF8String];
        sqlite3_stmt *select_stmt;

        if(sqlite3_prepare_v2(database, selectQuery, -1, &select_stmt, NULL) == SQLITE_OK)
        {
            while(sqlite3_step(select_stmt) == SQLITE_ROW)
            {
                NSInteger productID = sqlite3_column_int(select_stmt, 0);
                NSString productNo = [NSString stringWithUTF8String:(char *)sqlite3_column_text(select_stmt, 1)];
                // Store above data into dictionary or object and then add this to array
                [arrProducts addObject:dict];
            }
        }
    }
    else
    {
        NSLog(@"Error in opening database.");
    }
    return arrProducts;
}