Iphone 向表中插入数据时出现问题
sqlite3*数据库; sqlite3_stmt*语句; NSString*dPath=[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@“UserData.sqlite”]; const char*dbpath=[dPath UTF8String]; //NSLog(@“%@”,dbpath); //UserArray=[[NSMutableArray alloc]init]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(
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文件中声明
希望这有帮助