Objective c 目标C中的Sqlite数据库插入语句
我尝试只在sqlite数据库中插入两个整数变量。我创建了一个名为ups.sqlite的数据库,它有一个表(upstable),该表有两列。但当我打开/Users/ds/Library/Application Support/iPhone Simulator/5.0/Applications/fcb455-4B7F-4C47-81B6-AC4121874596/SqliteDeneme.app/ups.sqlite时,ups.sqlite中没有数据。我的代码在这里:Objective c 目标C中的Sqlite数据库插入语句,objective-c,ios,xcode,sqlite,insert,Objective C,Ios,Xcode,Sqlite,Insert,我尝试只在sqlite数据库中插入两个整数变量。我创建了一个名为ups.sqlite的数据库,它有一个表(upstable),该表有两列。但当我打开/Users/ds/Library/Application Support/iPhone Simulator/5.0/Applications/fcb455-4B7F-4C47-81B6-AC4121874596/SqliteDeneme.app/ups.sqlite时,ups.sqlite中没有数据。我的代码在这里: - (IBAction)but
- (IBAction)buttonClick:(id)sender {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath = [self getDBPath];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if(!success) {
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ups.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if (!success)
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
NSLog(@"database path %@",dbPath);
if(!(sqlite3_open([dbPath UTF8String], &cruddb) == SQLITE_OK))
{
NSLog(@"An error has occured.");
}
if(sqlite3_open([dbPath UTF8String], &cruddb) ==SQLITE_OK){
NSString * str1 =@"1";
NSString * str2 =@"1";
const char *sql = "INSERT INTO upssTable (column1, column2) VALUES (?,?)";
NSInteger result = sqlite3_prepare_v2(cruddb,sql, -1, &stmt, NULL);
NSLog(@"upss %s\n", sqlite3_errmsg(cruddb));
if(result == SQLITE_OK)
{
sqlite3_bind_int(stmt, 1, [str1 integerValue]);
sqlite3_bind_int(stmt, 2, [str2 integerValue]);
}
else
{
NSAssert1(0, @"Error . '%s'", sqlite3_errmsg(cruddb));
}
sqlite3_reset(stmt);
sqlite3_finalize(stmt);
sqlite3_close(cruddb);
}
}
- (NSString *) getDBPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:@"ups.sqlite"];
}
我怎样才能解决这个问题?请帮帮我。谢谢你的回复 您正在创建sqlite3语句,但实际上并不是使用
sqlite3\u step()
执行它
您似乎还要打开数据库两次?您根本没有使用sqlite3\u step()。这样试试
sqlite3 *database;
dbPath=[self.databasePath UTF8String];
if(sqlite3_open(dbPath,&database)==SQLITE_OK)
{
const char *sqlstatement = "INSERT INTO upssTable (column1, column2) VALUES (?,?)";
sqlite3_stmt *compiledstatement;
if(sqlite3_prepare_v2(database,sqlstatement , -1, &compiledstatement, NULL)==SQLITE_OK)
{
NSString * str1 =@"1";
NSString * str2 =@"1";
sqlite3_bind_int(compiledstatement, 1, [str1 integerValue]);
sqlite3_bind_int(compiledstatement, 2, [str2 integerValue]);
if(sqlite3_step(compiledstatement)==SQLITE_DONE)
{
NSLog(@"done");
}
else NSLog(@"ERROR");
sqlite3_reset(compiledstatement);
}
else
{
NSAssert1(0, @"Error . '%s'", sqlite3_errmsg(cruddb));
}
sqlite3_close(database);
}
罗布的解释很好。