2

I try to insert only two integer variable to my sqlite database. I created a database which name is ups.sqlite, it has a one table (upssTable) and the table have two column. But when I open /Users/ds/Library/Application Support/iPhone Simulator/5.0/Applications/FCB4B455-4B7F-4C47-81B6-AC4121874596/SqliteDeneme.app/ups.sqlite there is no data in ups.sqlite. My code is here:

- (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"];
}

How can I solve this problem? Please help me. Thanks for your reply.

0

2 Answers 2

6

You havent used sqlite3_step() at all. Try this way...

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);
}
Sign up to request clarification or add additional context in comments.

1 Comment

There is nice explanation by Rob. Here
5

You are creating your sqlite3 statement, but you aren't actually executing it using sqlite3_step().

Also you appear to be opening the database twice?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.