是否有任何方法可以使用Eclipse以Java字符串文字编写(复制粘贴)格式良好的SQL查询?

是否有任何方法可以使用Eclipse以Java字符串文字编写(复制粘贴)格式良好的SQL查询?,java,eclipse,formatting,Java,Eclipse,Formatting,当我希望在Java中使用SQL查询时,我通常将它们保存在最终的字符串变量中。现在,当字符串太大时,它超出了页面宽度,我们要么必须手动将其打断(在eclipse中,转到字符串中的某个特定位置,然后输入enter,然后对结果中的每个较小部分执行该操作),要么可以在eclipse中设置格式化程序,使其每行仅允许(比如)100个字符。但字符串并没有以逻辑方式断开 我可以在sqldeveloper中很好地格式化查询(比如说),但是如果我在Java中粘贴查询,我必须手动设置所有的结束引号和+符号,使其成为一

当我希望在Java中使用SQL查询时,我通常将它们保存在最终的字符串变量中。现在,当字符串太大时,它超出了页面宽度,我们要么必须手动将其打断(在eclipse中,转到字符串中的某个特定位置,然后输入enter,然后对结果中的每个较小部分执行该操作),要么可以在eclipse中设置格式化程序,使其每行仅允许(比如)100个字符。但字符串并没有以逻辑方式断开

我可以在sqldeveloper中很好地格式化查询(比如说),但是如果我在Java中粘贴查询,我必须手动设置所有的结束引号和
+
符号,使其成为一个正确的Java字符串。我只想知道一种将正确格式的SQL查询副本直接粘贴到Java文件中的方法。我正在使用Eclipse

当查询的格式如下时:

SELECT
  *
 FROM
  something
 WHERE
  id=4;
然后,当它粘贴到java字符串中时,我们可以将其如下所示:

"SELECT" +
  " *" +
 " FROM" +
  " something" + 
 " WHERE";
  id=4;

SQLDeveloper
中,选择查询并使用
Ctrl+F7
对其进行格式化。再次选择它并使用
Ctrl+Shift+F7
对其进行高级格式化,选择
剪贴板
作为输出目标,按所需类型输出类型,然后单击
应用
。现在,将其粘贴到Eclipse编辑器中并查看差异


我使用的是SQLDeveloper的3.1.07版。

在Eclipse中,在Java>Editor>下的窗口>首选项中键入选中“粘贴到字符串文字时转义文本”复选框

它将格式化纯文本:

line1
line2
line3
致:

这是Eclipse Helios上的输出。
一个类似的问题:

对于
DbVisualizer
,您可以使用
Ctrl+Alt+K
将sql格式化为所需的模式。

实际上这是一个非常好的问题,我经常想知道这一点。我可以给你的一个提示是使用以下方法:

//@formatter:off
    private static final String QUERY = 
    "SELECT t.* " +
      "FROM table t " +
     "WHERE t.age > 18";
//@formatter:on

它不会将SQL查询转换为Java字符串文字,但可以防止Eclipse将字符串重新格式化为不可读的格式。

这非常接近:如何将SQL以前导空格缩进:


如果您不介意在生成的SQL输出中添加额外的空格,这里有一个创造性的解决方案:

步骤1:粘贴

将格式化的SQL语句逐字粘贴到Java文件中

第二步:写开场白

请注意高亮显示的按钮,左边第六个。这就是很棒的“块选择模式”(Windows上的Alt-Shift-A)。它允许您在同一位置的每个选定行上写开头引号

步骤3:编写结束引号和连接

对结束引号和连接符号应用相同的技术(
+

步骤4:固定分号


这里不需要任何评论。

我知道我来晚了,但是对于任何使用大型查询的人来说,Eclipse中的块模式可能很难使用,因为如果查询超过100行左右(取决于您的机器),它会减慢速度

我发现这个网站,它是非常简单和非常快。将代码发布到窗口中,添加前缀(“)和后缀(“+”),然后单击另存为。它会很快地为每一行添加前缀和后缀

以下是在线工具:


这是否需要额外的插件或配置?对我来说不起作用。java代码格式化程序首选项中有一个选项必须启用才能起作用。事实上,您需要在Eclipse的checkstyle首选项中选中此选项。最好提到,也可以使用Ctrl+3(Mac上的Cmd+3)和键入block selection来切换块选择(任何操作都可以)。也很有用,例如用于显示空白字符。是的,谢谢@robinst。我总是忘记Ctrl+3。我几乎无法超越Ctrl+1:-)有什么方法可以防止DbVisualizer将查询的几乎每个字都放在自己的行中吗?谢谢,我必须承认我甚至想过创建smthn(类似:)
//@formatter:off
    private static final String QUERY = 
    "SELECT t.* " +
      "FROM table t " +
     "WHERE t.age > 18";
//@formatter:on
String sql =
    "SELECT\n" + 
    "  *\n" + 
    " FROM\n" + 
    "  something\n" + 
    " WHERE\n" + 
    "  id=4;";