24

当我希望在 Java 中使用 SQL 查询时,我通常将它们保存在 final String 变量中。现在,当字符串太大时,它会超出页面宽度,我们要么必须手动打破它(在 eclipse 中,转到字符串中的特定位置,然后输入,然后为每个生成的较小的部分),或者我们可以将 Eclipse 中的格式化程序设置为每行仅允许(例如)100 个字符。但是字符串没有以逻辑方式断开。

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

也许当查询格式如下:

SELECT
  *
 FROM
  something
 WHERE
  id=4;

然后当它粘贴在一个java字符串中时,我们可以像这样:

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

8 回答 8

19

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

第 1 步:粘贴

在此处输入图像描述

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

第 2 步:写开场白

在此处输入图像描述

注意突出显示的按钮,左数第六个。这就是很棒的“块选择模式”(Windows 上的 Alt-Shift-A)。它使您可以在同一位置的每条选定行上写开引号

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

在此处输入图像描述

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

第 4 步:修复分号

在此处输入图像描述

这里不需要评论。

于 2013-10-12T12:46:30.947 回答
14

在 Eclipse 中,在 Java > Editor > Typing 下的 Window > Preferences 中,选中“Escape text when paste into a string literal”复选框。

它将格式化纯文本:

line1
line2
line3

到:

private final String TEXT = "line1\r\n" + 
            "line2\r\n" + 
            "line3";

这是 Eclipse Helios 上的输出。一个类似的问题:用引号括起来

于 2012-10-18T07:43:27.980 回答
6

当您在 中时SQLDeveloper,选择查询并使用Ctrl + F7它来设置格式。再次选择它并使用它Ctrl + Shift + F7进行高级格式化,选择Clipboard输出目的地,输出类型为所需类型,然后单击Apply。现在,将它粘贴到 Eclipse 编辑器中,看看有什么不同。

我正在使用 SQLDeveloper 版本 3.1.07。

于 2012-10-18T07:09:10.013 回答
4

实际上是一个非常好的问题,我也经常对此感到疑惑。我可以给您的一个提示是使用以下内容:

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

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

于 2012-10-18T08:00:24.090 回答
2

我知道我参加这个聚会迟到了,但是对于任何使用大型查询的人来说,Eclipse 中的块模式可能很难使用,因为如果您的查询超过 100 行左右(取决于在您的机器上)。

我找到了这个网站,它非常简单而且非常快。将代码发布到窗口中,添加前缀 (") 并添加后缀 (" +),然后单击另存为。它将很快为每一行添加前缀和后缀。

这是在线工具:

http://textmechanic.co/Add-Prefix-Suffix-to-Text.html

于 2014-04-28T16:59:12.387 回答
1

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

于 2012-10-18T07:47:09.917 回答
1

这非常接近:如何粘贴带有前导空格缩进的 SQL: https ://stackoverflow.com/a/121513/1665128

String sql =
    "SELECT\n" + 
    "  *\n" + 
    " FROM\n" + 
    "  something\n" + 
    " WHERE\n" + 
    "  id=4;";
于 2012-10-18T09:09:16.050 回答
0

如果您使用的是 Java 15+,请使用文本块

private final String someSql = """
      Select 
        colA,
        colB 
      From 
        myTable
      Where
        something = 'abc'
""";
于 2021-11-04T16:29:12.357 回答