我有一个非常长的字符串,其中包含许多新行(这是一个非常长的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代码中?
答案 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中讨论了多行支持,但它很早就开始了。
我做什么
我首先加入所有行,然后将它们放在引号中。如果您在像Eclipse这样的编辑器中的光标位于String内,并且您点击了Enter键Eclipse, IDE将为您分割字符串。所以你会得到一堆“笨拙”的序列“line1”+“line2”......
我为扫描地址编写了一个解析器。在测试时我遇到了同样的问题,因为地址线本质上是几行长。所以我为我的测试用例切换到 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是否会这样做?),它具有列突出显示模式。