在sql查询中添加新的行字符(\ n)是否安全?

时间:2016-03-02 07:27:54

标签: java sql oracle newline

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中)?

2 个答案:

答案 0 :(得分:3)

是的,将新行(\n\r\n)添加到您的查询中是完全正常的。大多数解析器将换行符视为空格(就像空格或制表符一样),Oracle使用的那个(以及我使用过的所有其他数据库)也是如此。

您已经证明了这一点,因为根据您的意见,您的公司已经这样做了(并且可能已经这么做了多年)。我很好奇为什么你认为它可能不安全。因为很明显它是有效的,如果它不安全,Oracle就会明确错误地禁止它。

虽然非常主观,但它可能比不这样做更好,因为如果所有行以空格结束,它允许更容易的视觉检查。考虑以下两者之间的区别:

  1. 糟糕,没有空间

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

    "select * " +
    "from table"
    
  3. LINEBREAK

    "select *\n" +
    "from table"
    
  4. 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

比我想承认的更长的时间。