【问题标题】:Is there a easy way to use a long string with lots of double quotes in java, without escaping the quotes? [duplicate]有没有一种简单的方法可以在java中使用带有很多双引号的长字符串,而不转义引号? [复制]
【发布时间】:2014-07-10 08:35:51
【问题描述】:

我有一个很长的 SQL 字符串,其中有很多双引号,在使用之前我必须对其进行转义。有没有一种简单的方法可以做到这一点,比如从属性文件中读取字符串?

FOR E.G.:
SELECT
  (SELECT EXTRACTVALUE(XMLTYPE(COL1), '//p:testRq/policy/testId', 'xmlns:me="wsdl.http://www.example.com/Test", xmlns:ns0="wsdl.http://www.example.com/Test", xmlns:p="http://www.example.com/Test", xmlns:s="http://www.w3.org/2003/05/soap-envelope", xmlns:xsd="http://www.w3.org/2001/XMLSchema", xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance", xmlns="http://www.example.com/Test"')
  FROM TESTTABLE
  WHERE TESTID =
    (SELECT MIN(TESTID)
    FROM TABLE2
    WHERE COL1 = COL2
    )
  ) "RESULT"

好的,很容易解决这个问题。我刚刚在 orm xml 文件中创建了一个 named-native-query 并从那里使用了 sql 字符串。

【问题讨论】:

  • 举个例子让大家容易理解。
  • 您可以将文件中的字符串提供给您的 java 程序,然后读取文件并获取整个字符串。
  • 你用的是什么框架?普通的 JDBC? JPA?
  • 使用带有 JDO 或 JPA 的 db 框架。使用带有字符串处理的原始 sql 可能会出现 SQL 注入等严重问题
  • 我会将它写在一个单独的文件中,并在您需要时加载一次。

标签: java sql


【解决方案1】:

您可以使用另一个字符并即时替换它。

    String s = "Here's `Some quoted text`".replaceAll("`", "\"");

这里我使用了反引号。

【讨论】:

    【解决方案2】:

    请务必使用双引号作为例外。

    尽量不要使用保留字作为表名。如果双引号是强制性的,您很快就会收到 SQL 语法错误。

    使用对象/关系映射生成 SQL,然后问题也会消失。 (JPA、eclipseLink、mybatis)

    我会避免将 SQL 存储在其他地方,比如在 XML 文件中。不利于开发和维护。

    我会选择: JOOQ。使用 java 作为 DSL 编写类型安全的 SQL。

    【讨论】:

    • 我的猜测是问题主要出在EXTRACTVALUE 的参数上,其中包含很多引号,而不是"RESULT" 对象名称。
    猜你喜欢
    • 2019-12-27
    • 1970-01-01
    • 2015-10-27
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多