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();
我们过去常常添加新的线条特征。在查询中添加\n
字符是否安全(在Oracle中)?
答案 0 :(得分:3)
是的,将新行(\n
或\r\n
)添加到您的查询中是完全正常的。大多数解析器将换行符视为空格(就像空格或制表符一样),Oracle使用的那个(以及我使用过的所有其他数据库)也是如此。
您已经证明了这一点,因为根据您的意见,您的公司已经这样做了(并且可能已经这么做了多年)。我很好奇为什么你认为它可能不安全。因为很明显它是有效的,如果它不安全,Oracle就会明确错误地禁止它。
虽然非常主观,但它可能比不这样做更好,因为如果所有行以空格结束,它允许更容易的视觉检查。考虑以下两者之间的区别:
糟糕,没有空间
"select *" +
"from table"
空间
"select * " +
"from table"
LINEBREAK
"select *\n" +
"from table"
1和2之间的差异小于1到3.特别是在长查询中,这可能很重要,看你是否忘记了可能导致语法错误的空格,或者更糟糕的是查询行为不正确。
另一方面,新行是额外的视觉混乱,可能会分散阅读查询的注意力。如果有疑问,请选择贵公司的标准或代码风格。
答案 1 :(得分:1)
是的!但是,请确保您的换行符是实际上是换行符。
我花了3个小时才以为这是我的sql语法而无法拍摄 因为我用过:
String N = System.getProperty("line.seperator");
我以为我有换行符, 但是我实际上是在语句中插入 null 。
包含的错误消息:
1:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "NULLnull"
2:
org.postgresql.util.PSQLException: ERROR: conflicting NULL/NOT NULL declarations for column "nullid" of table "t_1"
3:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "KEYnull"
4:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "null"
我以为我是我的主要要旨:
id SERIAL PRIMARY KEY NOT NULL
比我想承认的更长的时间。