Слушайте свою интуиции
March 30th, 2009 Begemot Posted in Oбщее
Что отличает опытного разработчика от новичка? Правильно – хорошая интуиция 🙂
Только что ситуация на работе – надо написать сохранение проектов с которыми работает программа в базу данных. Как это все должно выглядеть обсудили еще в пятницу, начальник набросал табличку в которой все должно хранится. Я с утра сел – казалось бы куда проще – заимплементить дамп в бд, нескольких классов, учитывая что структура уже придумана и основной код сохранения в хмл написан.
Не работает, падает на pDB->PrepareStatement(…), убил 20 минут перепроверяя свои знания SQL, правильность написания полей и т.д. – все правильно, но не работает. Оказалось, что ему не нравится что одно из полей таблицы названо “Index”. Не знаю в чем трабла в SQLite или в используемом враппере wxSqlite3, или еще в чем… но факт что падает на строке
st = pDB->PrepareStatement(_T(“INSERT INTO MMFrames (ProjectID, Index, Type, Properties) VALUES (?, ?, ?, ?);”));
Пришлось переименовывать поле в таблице.
А весь юмор ситуации в том что, когда создавал бд – я подумал что лучше вместо Index назвать поле Position. Но решил что раз начальник написал Index, пусть так и будет. Потом подумал, что это поле вообще тут не нужно и хотел его удалить, но опять же решил оставить, раз на бумажке есть. Вообщем доверяйте своей интуиции.
March 31st, 2009 at 11:21 am
INDEX – зарезервированное слово SQL. Так что дело не в sqlite или библиотеке (например, вы наверняка знакомы с командой CREATE INDEX).
March 31st, 2009 at 12:00 pm
Каюсьььь и посыпаю голову пеплом:)
May 13th, 2009 at 11:24 am
Да, это известная фича =) По той же причине у меня в таблицах поголовно в качестве сокращения от description вместо desc используется descr. А вместо index, кстати, обычно пишут id.
На самом деле, не знаю, как в SQLite, а в MySQL это решается использованием апострофов: `Index`. Вообще, если взять за правило всегда заключать имена таблиц и полей в апострофы, а все значения, даже числовые, – в кавычки, можно избежать многих проблем. Впрочем, конечно, не использовать зарезервированные слова – тоже важная мера предохранения от ошибок.