В Eclipse, как получить текст SQL, когда он в строке Java?

У меня очень длинный оператор SQL внутри строки Java. В eclipse, как я могу легко получить текст инструкции SQL без синтаксиса Java String? Я вручную удалял его, но в IntelliJ Idea можно получить текст без необходимости выполнять ручную работу по форматированию, чтобы удалить синтаксис Java String (например, символы " и +). У Eclipse есть аналогичная функция?

В качестве дополнительного бонуса я бы спросил, можно ли также получить строку с новыми строками, установленными на месте, поскольку она была отформатирована в среде IDE, даже если в самой строке не было символов \n.

Ответ 1

В зависимости от вашего клиента SQL он может иметь эту функцию. Я знаю, что у TOAD есть эта функция встроенная. Я также помню, как Белка имела это.

Поэтому при вставке в SQL-редактор TOAD код автоматически извлекается из синтаксиса строки Java. Я помню, что он также работал с конструкциями типа StringBuffer/StringBuilder.

Смотрите: http://dev.toadformysql.com/webhelp/Content/Editor/Convert_SQL_Embedded_SQL.htm

Или вы можете создать простое регулярное выражение для вашего образца кода, например this jsfiddle. Он работает с регулярным выражением для sql, например:

"select something \r\n" +
"  from dual " +
 "where 1 = 1\r\n"; 

jsfiddle должен выводить

select something
  from dual
 where 1=1

Тем не менее, он не красиво отформатирован (даже если тег <pre> должен сохранять пробелы), но ваш SQL IDE должен помочь вам с этим, no?

Ответ 2

(мы используем Kepler)

  • Этот StringUtils плагин выглядит неплохо: http://marketplace.eclipse.org/content/stringutils-plugin (нажмите скриншоты).

    • не найден в диалоговом окне рынка Eclipse для установки
    • загрузил главный ZIP из своего репозитория GIT, но не пошел в пользу решения 5.
  • Вместе с плагином Java Multi-Line String Editor будет очень легко писать/читать/отлаживать такие заявления SQL: https://marketplace.eclipse.org/content/java-multi-line-string-editor

    • не найден в диалоговом окне рынка Eclipse для установки
  • Еще одно приятное решение выглядит как Multiline аннотация, где можно поддерживать строку в javadoc (которая будет преобразована в правильно отформатированную строку во время компиляции): https://github.com/benelog/multiline

  • вытеснение больших строк /SQL в отдельных файлах *.sql (и чтение их, например, из пути к классам) было бы 2-м лучшим вариантом, если это уместно:

  • лучшим решением для нас было использование Groovy ( "Расширение Java-скриптов" ) вместе с нашим кодом Java:

    • вам нужно установить плагин Groovy https://github.com/groovy/groovy-eclipse/wiki
    • просто говоря New -> Groovy Class автоматически добавляет Groovy Nature в наш проект, и после этого вы можете реализовать свои SQL как константы или перечисления, подобные этому:
      • поддерживает почти все (даже между барьерами Java- Groovy), поддерживаемые Java (редакторами):
        • выделение кода
        • рефакторинг (переименование), но только из Groovy файла
        • автозавершения / CTRL+rightclick -Навигационные
        • Javadoc намекает

src/my/pkg/SQLs.groovy:

package my.pkg

class SQLs {

  /** comment X */
  static final String SEL_X = ```
    select
      bla,
      foo
    from
      bar
    where
      x in (1,2,3)
  ```
}

src/my/pkg/SqlExec.java:

// ...
stmt.executeQuery( SQLs.getSEL_X() ) ;  /* Groovy auto-created this getSEL_X() 
                                        interface method transparently/auto-
                                        suggested, but the "comment X" is not 
                                        hinted */

и более подходящим для нашего случая использования было использование SQL в качестве перечисления:

enum SQLs {

  /** comment X */
  SEL_X(```
    select
      ...
      x in (1,2,3)
  ```)

  String sql

  SQLs( String sql ) { this.sql = sql }
}

к которому можно получить доступ в src/my/pkg/SqlExec.java, как это:

// the JavaDoc comment "comment X" works and the getSql() is transparently 
// auto-generated by Groovy
stmt.executeQuery( SQLs.SEL_X.getSql() ) ;

И больше сахара с отладкой всего в Eclipse с DTP: -)

= > поэтому отладка этих SQL файлов будет такой же простой, как:

  • SQLs.groovy file = > Открыть с помощью... = > Другое = > Редактор SQL (из очень приятного Eclipse Data Tools Platform (DTP) plugin: https://eclipse.org/datatools/)

    • вы всегда можете переключаться между редакторами по своему усмотрению (Eclipse запоминает последний используемый для каждого файла)
  • выбор правильного подключения для этого файла из пользовательских предварительно настроенных подключений db (должен быть открыт/подключен, если он еще не сделан)

  • маркировка для отладки SQL + ALT+X

  • результаты отладки запроса в виде вкладок или текстовых результатов...