首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java连接多行SQL语句的有效方法?

用Java连接多行SQL语句的有效方法?
EN

Stack Overflow用户
提问于 2019-10-13 10:52:55
回答 3查看 1.3K关注 0票数 0

是否有一种方法可以有效地连接Java SQL语句中的多行字符串?作为一个使用长SQL语句的开发人员,我正在寻找一种方法来做到这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-13 11:01:40

是的,您可以为整个结果分配足够空间的StringBuilder,然后使用它的append来追加片段,在完成toString时转换为string

代码语言:javascript
复制
StringBuilder sb = new StringBuilder(/*...number big enough for the whole thing...*/);
sb.append("SELECT [Foo], [Bar] FROM ");
sb.append(tableName); // **NOT** from a user, from internal logic
sb.append(" WHERE [X] = ?");
try (PreparedStatement ps = connection.prepareStatement(sb.toString())) {
    ps.setString(1, /*...*/); // This can be user-derived
    // ...
}

确保您的不通过StringBuilder或其他字符串组合方法将任何用户派生的信息放入StringBuilder。这种方式存在SQL注入攻击..。让我把你介绍给我的朋友鲍比

相反,对于该部分,使用前面示例中用[X] = ?ps.setString (和注释)显示的预准备语句和参数。

票数 3
EN

Stack Overflow用户

发布于 2019-10-13 11:01:15

不过,看上去可能会更好。

代码语言:javascript
复制
String pattern = 
        "INSERT INTO %s (%s,%s,%s) " +
        "VALUES (?,?,?)";
String query = String.format(pattern, "T", "C1", "C2", "C3");

不得直接从用户输入中提取T、C1等。

票数 1
EN

Stack Overflow用户

发布于 2019-10-13 11:13:11

除了上述答案之外,JDK 13还引入了文本块作为预览功能,它允许这样的文本块:

代码语言:javascript
复制
String message = """
    'The time has come,' the Walrus said,
    'To talk of many things:
    Of shoes -- and ships -- and sealing-wax --
    Of cabbages -- and kings --
    And why the sea is boiling hot --
    And whether pigs have wings.'
    """;

请注意,这是一个预览功能,还不能在生产中使用。必须使用--enable-preview命令行arg启用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58362869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档