是否有一种方法可以有效地连接Java SQL语句中的多行字符串?作为一个使用长SQL语句的开发人员,我正在寻找一种方法来做到这一点。
发布于 2019-10-13 11:01:40
是的,您可以为整个结果分配足够空间的StringBuilder,然后使用它的append来追加片段,在完成toString时转换为string
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 (和注释)显示的预准备语句和参数。
发布于 2019-10-13 11:01:15
不过,看上去可能会更好。
String pattern =
"INSERT INTO %s (%s,%s,%s) " +
"VALUES (?,?,?)";
String query = String.format(pattern, "T", "C1", "C2", "C3");不得直接从用户输入中提取T、C1等。
发布于 2019-10-13 11:13:11
除了上述答案之外,JDK 13还引入了文本块作为预览功能,它允许这样的文本块:
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启用。
https://stackoverflow.com/questions/58362869
复制相似问题