Как вы храните SQL запросы в коде?

Добрый день!

Пишу на Java под Android, но, думаю, вопрос может быть актуален для любого языка.

Возникли сложности с хранением текста sql-запросов в коде. Пробовал несколько подходов, но каждый из них имеет свои недостатки:

1) Хранить запросы текстом как они есть. Но при этом сложно найти упоминание какого-либо столбца в коде, можно совершить опечатку, которую потом тяжело найти. Все недостатки хардкода налицо.

2) Хранить имена столбцов и таблиц как константы. Но тогда запросы вообще становятся абсолютно нечитабельными из-за множественных конкатенаций.

3) Использовать порождающие шаблоны типа строителей и фабрик для создания запросов. Но код тогда получается ненаглядным, и его слишком много. И опять же, как хранить имена столбцов внутри строителей?

4) Использовать какие-то ORM невозможно в силу некоторых особенностей системы.

Хотелось бы услышать, каким образом вы храните sql-запросы в коде.
  • Вопрос задан
  • 8112 просмотров
Пригласить эксперта
Ответы на вопрос 11
xel
@xel
front end developer
Храню в XML.

В качестве имени узла — идентификатор запроса.
В атрибутах можно хранить список типов (для mysqli).

<getAssoc params="is">
SELECT content_id FROM assoc WHERE news_id=? AND type=? ORDER BY sort ASC
</getAssoc>
Ответ написан
Wott
@Wott
Как раз переношу работу с базой из java в php. Если запросы не в виде sql, пусть даже со вставками, то что бы найти нужный, приходиться врубаться в код, что крайне затрудняет работу.

Либо уж ORM нормальный прикручивать, либо строками.
Ответ написан
Комментировать
magnitudo
@magnitudo
Архитектор, программист, предприниматель...
1 + тесты на каждый запрос
столбца поиском по коду отлично ищутся, если взять за правило заключать их в двойные кавычки.
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
Query builder очень даже помогает.
Ответ написан
Столбцы храню прямо в классах с префиксом db_
 public class User 
{
  private String db_Name
  private DateTime db_DOB

}


Для составление запроса использую QueryBuilder через Reflection вытаскиваю поля
Ответ написан
Комментировать
@SunDevil2
обычно использую пункты 1 или 2, второй чаще
Ответ написан
taliban
@taliban
php программист
Что же здесь не читаемого? При любой опечатке вы получите ошибку с описанием неправильного столбца.
$sql = "SELECT shop_groups.shop_group_id, shop_groups.short_name
            FROM `shop_groups`
            WHERE shop_groups.parent_id = 0
            AND country_id = {$this->_cid}";
Ответ написан
@bugman
С точки зрения консистентности кода — всё что сложнее выборки из одного источника и фильтров по возможности переносить на вьюхи.
Ответ написан
Комментировать
corristo
@corristo
попробуйте Scala и какой-нибудь типобезопасный билдер запросов %)
Ответ написан
Комментировать
Flammar
@Flammar
Придётся сделать некое подобие ORM или построителя запросов (последнее проще). Можно сделать построитель запросов из XML-определения (всё равно структурнее, чем SQL), имена таблиц и полей прописать как константы через механизм XSD…
Ответ написан
@gleb_kudr
2+3

Имена как константы + фабрика запросов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы