Iphone 向表中插入数据时出现问题

Iphone 向表中插入数据时出现问题,iphone,objective-c,Iphone,Objective C,sqlite3*数据库; sqlite3_stmt*语句; NSString*dPath=[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@“UserData.sqlite”]; const char*dbpath=[dPath UTF8String]; //NSLog(@“%@”,dbpath); //UserArray=[[NSMutableArray alloc]init] if(sqlite3_open(

sqlite3*数据库; sqlite3_stmt*语句; NSString*dPath=[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@“UserData.sqlite”]; const char*dbpath=[dPath UTF8String]; //NSLog(@“%@”,dbpath); //UserArray=[[NSMutableArray alloc]init]

if(sqlite3_open(dbpath, &database) == SQLITE_OK)
{

    NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO User (UserName,FullName,Email,PhoneNo) VALUES (\"%@\", \"%@\", \"%@\" ,\"%@\")",txtUserName.text,txtFullName.text ,txtEmail.text , txtPhoneNo.text];

    const char *insert_stmt = [insertSQL UTF8String];

    sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL);

    if(sqlite3_step(statement)==SQLITE_DONE) 
    {
        txtUserName.text=@"";
        txtFullName.text=@"";
        txtEmail.text=@"";
        txtPhoneNo.text=@"";
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Add Record" message:@"Contact Added" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];    
        [alert show];
        [alert release];
        alert=nil;

    }
    else 
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"record" message:@"record not created" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];   
        [alert show];
        [alert release];
        alert=nil;
    }


    // Release the compiled statement from memory
    sqlite3_finalize(statement);

    sqlite3_close(database);
}

->>我正在尝试将数据插入表中。代码正确执行,但记录未添加到表中。所以请帮我解决这个问题…谢谢你的回复

尝试执行提交,因此将数据库设置为自动提交

// COMMIT
  const char *sql2 = "COMMIT TRANSACTION";
  sqlite3_stmt *commit_statement;
  if (sqlite3_prepare_v2(database, sql2, -1, &commit_statement, NULL) != SQLITE_OK) {
    NSAssert1(0, @"Error Message: '%s'.", sqlite3_errmsg(database));
  }
  success = sqlite3_step(commit_statement);
  if (success != SQLITE_DONE) {
    NSAssert1(0, @"Error Message: '%s'.", sqlite3_errmsg(database));
  }
}

我很抱歉,您为什么要对应用程序包中的数据库执行插入操作。尝试使用这个示例代码,我相信它可能对您有用

-(void)checkAndCreateDB {
    NSString* databaseName = @"MasterDB.sqlite";
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
    BOOL success1;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    success = [fileManager fileExistsAtPath:databasePath];
    if(success) return;
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
}

-(void)insertData{

    sqlite3 *database;
    sqlite3_stmt *statement; 
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
    {

        NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO User (uId,userName) VALUES (\"%d\", \"%@\")",1,@"RAHUL"];
        const char *insert_stmt = [insertSQL UTF8String];
        sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL);

        if(sqlite3_step(statement)==SQLITE_DONE) 
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Add Record" message:@"Contact Added" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];    
            [alert show];
            [alert release];
            alert=nil;

        }
        else 
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"record" message:@"record not created" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];   
            [alert show];
            [alert release];
            alert=nil;
        }   
        // Release the compiled statement from memory
        sqlite3_finalize(statement);    
        sqlite3_close(database);
    }
}
在这里,我复制了我的项目资源文件夹中的MasterDB.sqlite文件。当您运行应用程序时,我们通常在应用程序文档文件夹中复制数据库,然后执行任何读/写操作。执行插入操作的代码最少,只需调用
checkandcreatedb
,然后调用
insertData
函数即可。变量databasePath在包含这些方法的类的.h文件中声明

希望这有帮助