не в состоянии вставить запись в таблицу в цели c - PullRequest
0 голосов
/ 19 января 2012

Я сделал приложение для iPad, в котором

Я хочу вставить запись в таблицу базы данных, но не могу сделать то же самое.

вот мой фрагмент кода,

-(void) insertRecordIntoTableNamed: (NSString *) symbol{

NSString *sql = [NSString stringWithFormat:@"INSERT INTO recentquotes ('symbol', 'dt_tm') VALUES ('%@',datetime())",symbol];

   NSLog(@"sql=%@",sql);

    char *err;                          

    if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
    {
        sqlite3_close(db);
        NSAssert(0, @"Error updating table.");
    }

}

мой NSLog показывает:

sql=INSERT INTO recentquotes ('symbol', 'dt_tm') VALUES ('PATNI',datetime())

это утверждение верно, но я не вижу VALUES PATNI иdatetime() в моей таблице базы данных

вот остаток кода,

NSString *filePahs = Nil;
-(NSString *) filePath {

    filePahs=[[NSBundle mainBundle] pathForResource:@"companymaster" ofType:@"sql"];
    NSLog(@"path=%@",filePahs);
    return filePahs;
}

результат вышеупомянутого метода:

path = / Users / krunal / Library /Поддержка приложений / iPhone Simulator / 5.0 / Приложения / 9FF61238-2D1D-4CB7-8E24-9AC7CE9415BC / iStock kotak.app/companymaster.sql

-(void) openDB {
    //---create database---

    if (sqlite3_open([[self filePath] UTF8String], &db) != SQLITE_OK )
    {
        sqlite3_close(db);
        NSAssert(0, @"Database failed to open.");
    }
}



-(void) getAllRowsFromTableNamed: (NSString *) tableName {
    //---retrieve rows---
    NSString *qsql = @"SELECT * FROM recentquotes";
    sqlite3_stmt *statement;

    if (sqlite3_prepare_v2( db, [qsql UTF8String], -1, &statement, nil) ==
        SQLITE_OK) {
        NSLog(@"b4 while");
        while (sqlite3_step(statement) == SQLITE_ROW)
        {
            char *field1 = (char *) sqlite3_column_text(statement, 0);
                NSString *field1Str = [[NSString alloc] initWithUTF8String: field1]; 

            [recentqotarray addObject:field1Str];
            [field1Str release];

        }
        //---deletes the compiled statement from memory---
        sqlite3_finalize(statement);
        NSLog(@"recentqotarray=%@",recentqotarray);
    }   
}

edit

я написал это, и когдая проверил свой журнал я получил вот так, "в поиске данных", я не получил свой sql = ...

     - (void) finddata
{
    NSString *databasePath;
    const char *dbpath = [databasePath UTF8String];
    sqlite3_stmt    *statement;

    NSLog(@"in finddata");
    if (sqlite3_open(dbpath, &db) == SQLITE_OK)
    {
        NSString *querySQL = [NSString stringWithFormat: @"SELECT * FROM recentquotes"];
        NSLog(@"sql=%@",querySQL);
        const char *query_stmt = [querySQL UTF8String];

        if (sqlite3_prepare_v2(db, query_stmt, -1, &statement, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(statement) == SQLITE_ROW)
            {                
                NSLog(@"Inside recent quote table");
                char *field1 = (char *) sqlite3_column_text(statement, 0);
                NSLog(@"Column name=%s",field1);
                NSString *field1Str = [[NSString alloc] initWithUTF8String: field1]; 


                [recentqotarray addObject:field1Str];
                NSLog(@"array=%@",recentqotarray);

              } 
            sqlite3_finalize(statement);
        }
        sqlite3_close(db);
    }
}

Заранее спасибо

1 Ответ

1 голос
/ 19 января 2012

В вашем:

NSString *sql = [NSString stringWithFormat:@"INSERT INTO recentquotes ('symbol', 'dt_tm') VALUES ('%@',datetime())",symbol];

Вместо '%@' попробуйте использовать \"%@\" и проверьте, вставляется ли он в вашу базу данных.

РЕДАКТИРОВАТЬ:

IВ последнее время я много работаю с БД, и мне удалось успешно вставить данные в мой sqlite. Я напишу, что я использую, проверьте, поможет ли это:

NSArray*dirPath;
NSString*docDir;


dirPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docDir=[dirPath objectAtIndex:0];
databasePath=[docDir stringByAppendingPathComponent:@"example.sqlite"];


BOOL success;

NSFileManager*fm=[NSFileManager defaultManager];
success=[fm fileExistsAtPath:databasePath];

if(success)
{
   NSLog(@"Already present");
}

NSString*bundlePath=[[NSBundle mainBundle] pathForResource:@"example" ofType:@"sqlite"];
NSError*error;
success=[fm copyItemAtPath:bundlePath toPath:databasePath error:&error];

if(success)
{
    NSLog(@"Created successfully");
}
const char*dbPath=[databasePath UTF8String];

if(sqlite3_open(dbPath, &myDB)==SQLITE_OK)
{

        NSString*insertSQL=[NSString stringWithFormat:@"insert into extable (name) values (\"%@\")",[nametextField.text]];

        const char*insertStmt=[insertSQL UTF8String];
        char *errmsg=nil;

        if(sqlite3_exec(myDB, insertStmt, NULL, NULL, &errmsg)==SQLITE_OK)
        {
            NSLog(@"ADDED!");
        }

 sqlite3_close(myDB);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...