2010-07-31 106 views
6

我有一個非常長的字符串,其中包括許多新行(這是一個非常長的SQL語句)。什麼是Perl的qq操作符的Java等價物?

當我用換行符分解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語句。我最終必須刪除所有的引號和+的

是否有Java的等價物?或者是否有更好的技巧來將可讀的,可複製的SQL語句放入Java代碼中?

+9

Perl允許在普通引用字符串中換行。 'q'和'qq'的目的是提供可選的分隔符,所以你不必反斜槓的引號。 – friedo 2010-07-31 00:20:22

回答

5

多行字符串在Java中

是否有一個Java等同?

在撰寫本文時,我不這麼認爲。但是有一個建議是在Java中包含多行字符串。


還是有更好的技巧,把 讀取,複製,能夠SQL語句 Java代碼?

通過串聯將參數放入SQL查詢不是一個好主意。有類和API來幫助你形成查詢。

「查詢包裝器」

包裝器可以增強可讀性,例如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

+0

或者使用2010工具並使用對象映射框架 – TheLQ 2010-07-31 00:51:47

+1

*是* JPA和JDO的規範。 – bakkal 2010-07-31 00:57:42

+0

謝謝,我希望能讓我的生活變得更輕鬆。現在我使用PreparedStatement並用參數替換「?」。如果我需要複製它並粘貼到Query瀏覽器,我總是可以System.output SQL語句 – 2010-08-03 16:31:14

3

沒有等價物。另一種方法是將SQL放入屬性文件中,並使用Properties對象讀入屬性文件。

您仍然有反斜槓,但不如所有引號。

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

我有時寫像

public static String cat(String ... lines) { } 

一個函數,它串接線,並增加了換行。如果字符串在編譯時已知,則效率不高。

在SQL的情況下,我同意Bakkal - 使用包裝庫。 Empire-db很棒。 http://incubator.apache.org/empire-db/

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

0

它現在不存在。在Java 7中討論了多線支持,但它很早就被踢出了。

我做什麼

  1. 我第一次參加所有的線,然後把它們放在引號。如果你在像Eclipse這樣的編輯器中進行遊標操作,並且你點擊Enter鍵Eclipse,IDE將爲你分割字符串。所以你會得到一堆「尷尬的」序列「line1」+「line2」......。

  2. 我寫了一個解析器來掃描地址。雖然測試我有同樣的問題,因爲地址線本質上是幾行。所以我轉換爲Groovy爲我的測試用例,因爲Groovy提供多行字符串和更多:http://groovy.codehaus.org/Strings+and+GString

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

所以,你必須有一個IDE或其他編輯器(任何人都知道,如果Eclipse會這樣做嗎?)在複製/粘貼到SQL工具之前,它具有列突出顯示模式。

相關問題