#iphone #sqlite
#iPhone #sqlite
Вопрос:
я знакомился с sqlite и пытался вставить значения в базу данных, но выдавал исключение. tf1 и tf2 являются объектами текстового поля. вот мой код:
@синтезировать tf1, tf2, добавить, удалить; -(id)initApp { если (![супер инициализация]) возвращает nil; // База данных, хранящаяся в пакете приложений NSString *DBName = @"kbase.sqlite"; NSArray * пути = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, маска домена NSUSERDOMAIN, ДА); NSString *documentsDirectory = [пути к объектному индексу:0]; NSString *path = [documentsDirectory stringByAppendingString:DBName]; db = [FMDatabase databaseWithPath:путь]; [db setLogsErrors: TRUE]; [db setTraceExecution:TRUE]; если (![база данных открыта]) { NSLog(@"Не удалось открыть базу данных"); возвращает 0; } ещё { NSLog(@"База данных успешно открыта"); } возвращает self; } - (пустота)viewDidLoad { [super viewDidLoad]; [self initApp]; [добавить addTarget:self action:@selector (insertButtonClicked:) Для controlevents:UIControlEventTouchUpInside]; [disp addTarget:self action:@selector (displaytButtonClicked:) Для controlevents:UIControlEventTouchUpInside]; } -(IBAction)insertButtonClicked:(идентификатор) отправителя { NSLog(@"вставить"); NSLog(@"db.....%@",db); [db executeUpdate:@"вставить в информационные значения (?,?)", tf1.text, tf2.text]; [первый ответ на запрос об отказе от участия]; } -(IBAction)displayButtonClicked: (идентификатор) отправителя { NSString * str1 = tf2.text; NSString *returnResult = [[NSString alloc]инициализация]; FMResultSet * rs = [запрос выполнения базы данных:@"выберите имя из информации, где rollno = 1"]; пока ([rs next]) { returnResult = [rs stringForColumn:@"rollno"]; [tf1 setText:returnResult]; [tf2 setText:returnResult]; } }
база данных успешно открывается и управление завершается после печати исключения вставки:
Завершение работы приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '*** -[NSURL ExecuteQuery:]: нераспознанный селектор, отправленный экземпляру 0x3d30ef0'
я не могу настроить проблему. пожалуйста, помогите.
Комментарии:
1. показать код executeUpdate
2. Как вы можете видеть, объект NSURL получает метод запроса. Можете ли вы указать имя класса базы данных перед запуском своих инструкций? И, пожалуйста, опубликуйте код, как вы настраиваете db.
3. что вы делаете в методе executeUpdate? Можете ли вы показать код?
4. @rakesh loves, @четан бхалара: я обновил свой код! пожалуйста, проверьте код
5. @четан: я использовал менеджер sqlite для создания bd и таблицы!
Ответ №1:
Я думаю, сделайте свой метод
[db executeUpdate:@»вставить в информационные значения (?,?)» с помощью value1:tf1.text с помощью value2:tf2.text];
Вместо
[db executeUpdate:@»вставить в информационные значения (?,?)», tf1.text, tf2.text];
Комментарии:
1. позвольте мне все объяснить. я создал базу данных через sqlite manager и объявляю только имя столбца «name»,»rollno». я перетащил эту базу данных в свою папку ресурсов. итак, все это выдает исключение
Ответ №2:
кажется, что db
в этом контексте этого не существует. Если db
это переменная класса, убедитесь, что она не выпущена где-то еще. Просто поставьте NSLog(@"%@", db);
над выполнением, чтобы проверить это.
Комментарии:
1. db — это объект класса FMDatabase!
2. извините, что он показывает path:localhost/Users/gauravmurghai/Library/Application Support/iPhone Simulator/User/Library/Preferences/.GlobalPreferences.plist. я не помещал значение в UITextField раньше!