什么是Perl的qq运算符的Java等价物?

时间:2010-07-31 00:13:19

标签: java perl syntax string operators

我有一个非常长的字符串,其中包含许多新行(这是一个非常长的SQL语句)。

当我使用换行符分解SQL时,SQL更容易阅读。但我不时需要  从代码中复制sql语句以粘贴到sql developer。

在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语句。我最终不得不删除所有引号和+'s

是否有Java等价物?或者是否有更好的技巧将可读的,可复制的SQL语句放在Java代码中?

5 个答案:

答案 0 :(得分:5)

Java中的多行字符串

  

是否有Java等价物?

在撰写本文时,我不这么认为。但是,有人建议在Java中包含多行字符串。


  

还是有更好的技巧   可读,可复制的SQL语句   Java代码?

通过连接将参数放入SQL查询中并不是一个好主意。有一些类和API可以帮助您形成查询。

“查询包装”

Wrappers可以增强可读性,例如在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

答案 1 :(得分:3)

没有相应的东西。另一种方法是将SQL放在属性文件中,并使用Properties对象读入属性文件。

你仍然有反斜杠,但没有所有引号那么多。

SELECT * \
FROM table_a a \
JOIN table_b b ON a.id = b.id \

答案 2 :(得分:0)

我有时写一个像

这样的函数
public static String cat(String ... lines) { }

连接线并添加换行符。如果字符串在编译时是已知的,那么效率很低。

在SQL案例中,我同意Bakkal - 使用包装库。 Empire-db很棒。 http://incubator.apache.org/empire-db/

我不同意使用O / R框架的建议。

答案 3 :(得分:0)

现在不存在。 Java 7中讨论了多行支持,但它很早就开始了。

我做什么

  1. 我首先加入所有行,然后将它们放在引号中。如果您在像Eclipse这样的编辑器中的光标位于String内,并且您点击了Enter键Eclipse, IDE将为您分割字符串。所以你会得到一堆“笨拙”的序列“line1”+“line2”......

  2. 我为扫描地址编写了一个解析器。在测试时我遇到了同样的问题,因为地址线本质上是几行长。所以我为我的测试用例切换到 Groovy ,因为Groovy提供多行字符串等等:http://groovy.codehaus.org/Strings+and+GString

答案 4 :(得分:0)

这是我使用的 - 对我来说效果很好(我将其他第一条评论留给其他人)

// 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+", " ");

因此,在复制/粘贴到SQL工具之前,您必须拥有一个ide或其他编辑器(任何人都知道Eclipse是否会这样做?),它具有列突出显示模式。