Я недавно - совсем недавно - начал изучать программирование для 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 не являются строго типизированными, и я технически мог бы сделать это в любом случае), б) эточувствовал себя неумелым взломом, и c) я предположил, что была причина, по которой этот подход не получил широкого распространения.Итак:
1) Почему в SQLite отсутствуют методы привязки, которые принимают имя параметра (например, «const char»)?Или я что-то упустил?
2) Почему никто не использует подход, подобный приведенному выше?
Я немного покопался в исходном коде и думаю, что мог бы легко модифицировать библиотеку или просто написать свои собственные (типизированные) методы класса, которые бы делали для меня вышеупомянутое, но я предполагаю, что нет ни одной причинывстроил это в SQLite еще.Я могу только предположить, что дополнительная память и циклы, необходимые для поиска индекса параметра, слишком ценны для [вставьте здесь iDevice] и не стоят удобства использования имен параметров.,,?
Любое понимание будет оценено.