2016-03-02 44 views
0
StringBuilder sql = new StringBuilder(); 

     sql.append("SELECT C.ID,\n" + 
       " CODE\n" + 
       " FROM DB.TEATABLE C\n" + 
       " LEFT JOIN\n" + 
       " (SELECT IT.TEA,\n" + 
       "  IT.COFFEETYPE,\n" + 
       "  XREF.AUSTIN_COFFEE_LEAF_CODE AS LEAFCODE\n" + 
       " FROM DB.COFFEE_AUSTIN_XREF XREF,\n" + 
       "  DB.INDIAPLAN TP,\n" + 
       "  DB.COFFEE IT,\n" + 
       "  DB.TEATABLE C\n" + 
       " WHERE C.ID   = IT.TEA\n" + 
       " AND IT.COFFEETYPE = 'RIL'\n" + 
       " AND IT.INDIAPLANID =TP.ID"); 
con  = getConnection(); 
pstmt = con.prepareStatement(sql.toString()); 
rs  = pstmt.executeQuery(); 

我們用來像上面那樣添加新的線輪廓線。在查詢中(在Oracle中)添加\n字符是否安全?在sql查詢中添加新的行字符( n)是否安全?

+3

爲什麼要添加它?它無濟於事 – Jens

+1

@Jens可能用於在控制檯或日誌文件中打印查詢時格式化的目的 – Pragnani

+0

您正在使用MySQL還是Oracle?不要標記不涉及的產品。 – jarlh

回答

1

是的,向您的查詢添加換行符(\n\r\n)是完全正確的。大多數解析器認爲換行符是空格(就像空格或製表符),Oracle使用的也是這樣(以及我用過的所有其他數據庫)。

你已經證明了這一點,因爲根據你的意見你的公司已經這樣做了(可能已經這麼多年了)。我很好奇你爲什麼認爲這可能是不安全的。因爲它顯然是有效的,並且如果它不安全,Oracle會以一個明確的錯誤拒絕它。

儘管非常主觀,但它可能比不這樣做更好,因爲如果所有行都以空白結尾,它可以更容易進行視覺檢查。考慮之間的區別:

  1. 哎呀,沒有空間

    "select *" + 
    "from table" 
    
  2. 空間

    "select * " + 
    "from table" 
    
  3. 換行符

    "select *\n" + 
    "from table" 
    

1和2之間的差異小於1和3之間的差異。特別是在長查詢中,這可能很重要,看看您是否忘記了可能導致語法錯誤的空白,或者對不正確的查詢行爲更糟糕。

另一方面,換行符是額外的視覺混亂,可能會分散閱讀查詢。如有疑問,請遵循貴公司的規範或代碼風格。

+0

謝謝馬克。關於你的疑問「我很好奇你爲什麼認爲這可能是不安全的。」 - >我不知道這是否會使任何問題在不同版本中運行。你的答案很適合我。謝謝 – smilyface