Что такое Java-эквивалент оператора Perl qq? - PullRequest
6 голосов
/ 31 июля 2010

У меня очень длинная строка, которая включает много новых строк (это действительно длинный оператор SQL).

SQL легче читать, когда я разбиваю его на новые строки.Но время от времени мне нужно копировать SQL-оператор из кода для вставки в SQL-разработчик.

В Perl мне всегда нравился оператор qq, который можно использовать вместо двойных кавычек:

Вы используете что-то вроде этого:

$myString = qq{       
                      SELECT * 
                      FROM table_a a
                      JOIN table_b b ON a.id = b.id ... etc
                };

Есть ли эквивалент в JAVA?Мне неловко разбивать строку на куски следующим образом:

String myString = "    SELECT *  " + 
                  "    FROM table_a a " + 
                  "    JOIN table_b b ON a.id = b.id ... etc ";

, и трудно скопировать оператор SQL из кода.В конце концов мне пришлось удалить все кавычки и +

Есть ли эквивалент Java?Или есть ли лучший способ поместить читаемые, копируемые операторы SQL в код Java?

Ответы [ 5 ]

5 голосов
/ 31 июля 2010

Многострочные строки в Java

Есть ли эквивалент Java?

На момент написания я так не думаю. Однако есть предложение включить многострочные строки в Java.


Или есть лучший способ поставить читаемые, копируемые операторы SQL в Java-код?

Вставка параметров в SQL-запросы с помощью конкатенации не очень хорошая идея. Существуют классы и API, которые помогут вам формировать запросы.

"Обертки запросов"

Оболочки могут улучшить читаемость, например, в JDOQL (JDO) вы можете создать запрос, используя setWhere(), setLimit(), setDistinct() и т. Д.

Query q = pm.newQuery (...);
q.setWhere(...);
q.setRange (...);
q.setOrdering (...);
q.setLimit(...);
q.newParameter(...); // declare a query parameter

q.execute(34.5); // execute the SQL query with a parameter

Для JPA вы можете прочитать JPQL .

если вы используете простой JDBC, вы также можете взглянуть на PreparedStatement .

3 голосов
/ 31 июля 2010

Нет эквивалента. Альтернативой является помещение SQL в файл свойств и чтение в файле свойств с использованием объекта Properties.

У вас все еще есть обратный слеш, но не так много, как во всех кавычках.

SELECT * \
FROM table_a a \
JOIN table_b b ON a.id = b.id \
0 голосов
/ 25 мая 2011

Вот то, что я использую - у меня довольно хорошо работает (я оставляю первый комментарий как есть для других)

// Tip: UltraEdit column-copy mode (alt-c) gets the SQL without quotes
String sql = 
    "select                                          " + 
   //-- comment here
    "big-long-query goes here...                     " +   
    "last line                                       ".replaceAll("\\s+", " ");

Так что вам нужен иде или другой редактор (любой знает, если Eclipse делаетэто?) с режимом подсветки столбцов перед копированием / вставкой в ​​инструмент SQL.

0 голосов
/ 31 июля 2010

Сейчас его не существует. Многострочная поддержка обсуждалась в Java 7, но вышла довольно рано.

Что я делаю

  1. Сначала я соединяю все строки, а затем помещаю их в кавычки. Если курсор в редакторе, подобном Eclipse, находится внутри строки, и вы нажали клавишу Enter, Eclipse, то IDE разделит строку для вас . Таким образом, вы получите кучу "неловких" последовательностей "line1" + "line2" ....

  2. Я написал парсер для сканирования адресов. Во время тестирования у меня была та же проблема, потому что адресные строки по своей природе имеют длину несколько строк. Поэтому я переключился на Groovy для моих тестовых случаев, потому что Groovy предлагает многострочные строки и многое другое: http://groovy.codehaus.org/Strings+and+GString.

0 голосов
/ 31 июля 2010

Я иногда пишу такую ​​функцию, как

public static String cat(String ... lines) { }

, который объединяет строки и добавляет новые строки. Если строки известны во время компиляции, это неэффективно.

В случае с SQL я согласен с Bakkal - используйте библиотеку оберток. Empire-db это здорово. http://incubator.apache.org/empire-db/

Я не согласен с предложением использовать O / R framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...