[英]Dealing with ugly SQL in Java
這是一個SQL-Java編碼風格的問題...
這里的其他人如何處理干凈地在Java中創建復雜的自定義查詢?
我說的是准備一個似乎是要執行的SQL語句的字符串的看似簡單的任務。
我知道HQL以及存儲過程,但是老實說我並不真正喜歡這些解決方案。 也許可以說服我不同。 存儲過程部署/維護很煩人,而對我而言,解析性能並不是一個大問題-靈活性優先。 HQL似乎是一個巨大的飛躍,並且對我的復雜查詢有一些限制。
明確地說,我說的是看起來很丑陋的代碼,如下所示:
return
"(" + topTwenty + ")" +
"UNION " +
"(" + twentyBeforeMe + ")" +
"UNION " +
"(" + meDummyQuery + ")" +
"UNION " +
"(" + twentyAfterMe + ")";
例如,在變量topTwenty所在的地方,子查詢也類似地創建。
我從沒想過要這么說,但是在PHP中它比較干凈,因為PHP中包含多行字符串和$ variable嵌入到字符串中。
人們是否曾經使用過簡單的模板庫? 您如何整齊地將字符串保留在程序中? 還是將它們放在單獨的文件中(對我來說似乎也很煩)。
如果不進行數據庫抽象,則可以使用PreparedStatment使查詢更具可讀性-更不用說它有助於提高安全性。
您可能想看看參數化查詢,您可以使用JDBC PreparedStatement
查詢。 如果您來自PHP世界,則類似於PDO。 基本上。 您上面提到的PHP字符串中所有的動態$variable
都將是?
參數化查詢中的。 ?
使用PreparedStatement
實現的方法以安全的方式(以正確的轉義方式)進行替換。
有關示例和更多說明,請參見Sun的PreparedStatement教程 。
Java具有PrintFormat類,該類與C中的sprintf十分相似,您可能想利用它來格式化查詢。
以下代碼段摘自http://java.sun.com/developer/technicalArticles/Programming/sprintf/
System.out.println(
new PrintfFormat("Pre %s Post%%").sprintf("target")
);
SQL構造集 ,這是我的項目。
如果您認為這會使代碼看起來更簡潔,則可以嘗試使用StringBuilder.append():
return new StringBuilder()
.append("(").append(topTwenty).append(")")
.toString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.