Я получаю сообщение об ошибке после вставки данных в sqlite3 - PullRequest
0 голосов
/ 10 января 2011

Я использую следующий код для вставки в sqllite с помощью iphone - (Недействительными) сохранить {

AlarmData *alarm=[CallSettings getAlarm];
alarm.subject=subjectText.text;
alarm.sound=tempDefault;
NSDate *dat=[datePicker date];
NSString *da=(NSString *)[NSString stringWithFormat:@"%@",dat];
alarm.date=da;

//alarmData.date=da;
NSLog([CallSettings getAlarm].subject);
NSLog([CallSettings getAlarm].no1);
NSLog([CallSettings getAlarm].lname);
NSLog([CallSettings getAlarm].name);
NSLog([CallSettings getAlarm].date);
NSLog([CallSettings getAlarm].sound);


NSString *fullName=[NSString stringWithFormat:@"%@ %@",alarm.name,alarm.lname];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"appointment.sql"];
sqlite3 *database;
if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
    // Setup the SQL Statement and compile it for faster access
    const char *sqlStatement = "select * from Alarm";

    sqlite3_stmt *compiledStatement;

    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
        // Loop through the results and add them to the feeds array

        compiledStatement=NULL;

        const char *sql = "insert into Alarm(name) values ('Ahmed')";

        if(sqlite3_prepare_v2(database, sql, -1, &compiledStatement, NULL) != SQLITE_OK);
        else {
            if(SQLITE_DONE != sqlite3_step(compiledStatement))
                NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
            else
                //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
                //coffeeID = sqlite3_last_insert_rowid(database);
                NSLog(@"Value is inserted");
            //  sqlite3_reset(compiledStatement);
        }
    }




    }




}
 sqlite3_close(database);

} // конец метода сохранения

При вызове этого метода происходит сбой приложения и возникает следующая ошибка

2011-01-10 19: 23: 56.307 Назначение [521: 207] * Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '* + [NSString stringWithUTF8String:]: NULL cString' 2011-01-10 19: 23: 56.321 Назначение [521: 207] Стек: ( 843263261, 825818644, 842812211, 842812115, 863177559, 21701, 844154820, 19557, 846200172, 843020431, 844097412, 844097260, 844097204, 844096268, 844356084, 846188672, 862896011, 843011267, 843009055, 860901832, 843738160, 843731504, 10565, 10480 ) прекращение вызова после выброса экземпляра 'NSException' Программа получила сигнал: «SIGABRT». (ГБД)

и приложения не запускаются в следующий раз до тех пор, пока я не удалю приложение с моего устройства, я думаю, что файл базы данных выйдет из строя

1 Ответ

1 голос
/ 10 января 2011

Вы должны использовать sqlite3_finalize (compiledStatement) вместо compiledStatement = NULL;Просто прочитайте документацию, и вы поймете, почему.Или вы можете использовать другую переменную для sqlite3_stmt, для INSERT.

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