Я пытаюсь добавить 3 части данных в базу данных SQLite3. С помощью учебника я почти там. Ниже мой код.Добавление данных в SQLite3 DB изнутри Xcode
Я получаю то, что ожидаю от NSLogs
. Я нахожу DB без проблем, я скомпилирую инструкцию для отправки в БД без проблем, но когда приложение доходит до sqlite3_prepare_v2(database, sqlstatement, -1, &compliedstatement, NULL)==SQLITE_OK
, я ожидаю, что данные будут добавлены в DB
, но это не так, и я также ожидаю для отображения UIAlertView
, чтобы сообщить пользователю ERROR os SUCCESS. Надеюсь, ты увидишь, чего я не вижу.
Этот NSLog
возвращает свойства текста, как ожидалось.
- (IBAction)hide:(id)sender {
[name resignFirstResponder];
[age resignFirstResponder];
[color resignFirstResponder];
}
- (void)viewDidLoad
{
[super viewDidLoad];
DBName = @"mydatabase.sqlite";
NSArray *documentsPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentsPaths objectAtIndex:0];
DBPath = [documentsDir stringByAppendingPathComponent:DBName];
}
-(void)checkAndCreateDB {
BOOL Success;
NSFileManager *fileManager = [NSFileManager defaultManager];
Success = [fileManager fileExistsAtPath:DBPath];
if(Success) {
NSLog(@"DB Found");
return;
}
NSLog(@"DB Not Found");
NSString *databasePathFromApp = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:DBName];
[fileManager copyItemAtPath:databasePathFromApp toPath:DBPath error:nil];
}
Этого NSLog
возвращает
-(void)insertData Name:(NSString*)n Age:(NSString*)a Color:(NSString*)c {
[self checkAndCreateDB];
sqlite3 *database;
if (sqlite3_open([DBPath UTF8String],&database)==SQLITE_OK) {
NSString *statement;
sqlite3_stmt *compliedstatement;
statement = [[NSString alloc] initWithFormat:@"insert into table1 values ('%@', '%@', '%@')",n,a,c];
const char *sqlstatement = [statement UTF8String];
NSLog(@"%@",statement);
if (sqlite3_prepare_v2(database, sqlstatement, -1, &compliedstatement, NULL)==SQLITE_OK) {
if (SQLITE_DONE!=sqlite3_step(compliedstatement)) {
NSAssert1(0, @"Error by inserting '%s'", sqlite3_errmsg(database));
UIAlertView *AlertOK = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"Error by inserting" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[AlertOK show];
}
else {
UIAlertView *AlertOK = [[UIAlertView alloc] initWithTitle:@"Success!" message:@"Data successfully inserted" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[AlertOK show];
}
}
sqlite3_finalize(compliedstatement);
}
sqlite3_close(database);
}
И последняя NSLog
выше дисплеев insert into table1 values ('n', 'a', 'c')
, как я бы ожидать.
Что-то происходит неправильно при вставке, и я не могу понять это.
FYI БД была создана с использованием SQLiteManager. SS ниже:
Можете ли вы быть более точным, что именно произошло? Вы подготовили заявление, но с какой ошибкой вы сталкиваетесь? было ли это (SQLITE_DONE! = sqlite3_step (compliedstatement)) выполнено? Вот что случилось потом? – Byte
Я получаю Успех 'UIAlertView', но когда я открываю свою базу данных в SQLiteManager и' select * from table1', есть 0 записей. –