Недавно я совсем недавно начал изучать, как программировать для iOS, и был озадачен тем, что появляется (для меня), чтобы быть вопиющим надзором в SQLite3. Позвольте мне сказать, что до прошлой недели у меня был нулевой (практический) опыт работы с Mac, Objective C, Xcode, iOS или SQLite, поэтому у меня нет заблуждений о вальсировании в поле проверенных и проверенных инструментов и поиска очевидных ошибок с моей первой попытки. Я предполагаю, что есть хорошее объяснение.
Однако, проведя последние несколько месяцев с использованием SQL Server, MySQL и PostgreSQL, я был поражен, обнаружив, что SQLite не имеет лучшей функциональности для добавления параметров по имени. Все, что я мог найти в Интернете (документация, форумы [в том числе SO]), говорит, чтобы назначать параметры, используя их целочисленный индекс, который, похоже, будет больно поддерживать, если вы когда-либо изменяете свои запросы. Даже если вы можете назвать параметры в своих утверждениях и сделать что-то вроде
sqlite3_bind_int(stmt, sqlite3_bind_parameter_index(stmt, "@my_param"), myInt);
Никто, похоже, тоже этого не делает. На самом деле, никто не пытается автоматизировать это вообще; единственный альтернативный подход . Я мог найти используемый массив параметров и счетчик циклов и проверил каждый параметр, чтобы определить, какой тип объекта нужно вставить. Первоначально я рассматривал аналогичный подход, но а) позиция моего босса заключается в том, что параметры базы данных всегда должны быть проверены на типе (и я согласен, хотя я понимаю, что поля SQLite не сильно типизированы, и я технически мог это сделать в любом случае), б) он чувствовал себя нелепым взломом, и в) я предположил, что существует причина, по которой этот подход широко не использовался. Итак:
1) Почему в SQLite нет методов привязки, которые принимают имя параметра (как, скажем, 'const char')? Или есть, и я чего-то не хватает?
2) Почему никто не использует подход, подобный приведенному выше примеру?
Я немного выкопал в исходном коде и думаю, что я мог бы легко изменить библиотеку или просто написать свои собственные (типизированные) методы класса, которые могли бы сделать выше для меня, но я предполагаю, что причина, по которой никто не создал эту в SQLite. Мое единственное предположение заключается в том, что дополнительная память и циклы, необходимые для поиска индекса параметра, слишком ценны для [insert iDevice здесь] и не стоят того, чтобы использовать имена параметров.,
Любое понимание будет оценено.