java - 使用 StringBuffer 构建更高效的 SQL 插入

标签 java sql

我正在开发一个项目,并且创建了一个方法 insertStatement(),它创建一个字符串缓冲区来构造我的 SQL 插入语句。这是:

private String insertStatement() {

    StringBuffer sb = new StringBuffer(
            "insert into CUSTOMER (NAME, NUMBER, CITY, STATE) values (");
    sb.append("'" + this.custName + "',");
    sb.append("'" + this.custNum + "',");
    sb.append("'" + this.custCity + "',");
    sb.append("'" + this.custState + ")");
    return sb.toString();
}

我想知道是否有一种更有效的方法来构建此语句,而不必在每行开头附加 ' 并在末尾附加 ',结束。

问题的更多细节。我正在创建一个批处理作业,此方法将语句作为字符串返回,然后填充一个数组列表,该列表将传递给 ItemWriter,然后 ItemWriter 将数据存储到数据库中。

最佳答案

永远不要使用StringBuffer。它已被 StringBuilder 取代。使用PreparedStatement;它是类型安全的并且可以防止 SQL 注入(inject)攻击。

如果您确实使用 StringBuilder 来构建字符串,请不要在 append 序列中进行内联字符串连接;只需使用append即可。

至于前置(不是“附加”)引号和附加引号逗号,这是构建不安全 SQL 字符串的产物,在该上下文中是不可避免的。 PreparedStatement 将为您处理该问题。

关于java - 使用 StringBuffer 构建更高效的 SQL 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599566/

相关文章:

java - 以对象值作为键的 HashMap

java - 在android中以表格形式排列sqlite表数据?

java - 使用 for-each 循环或使用迭代器迭代 JSON 数组 (Android Studio)

sql - 这是我在 MySQL 中尝试做的事情的最佳查询吗?

java - 在Android Java中,类名放在括号中是什么意思?

java - 关闭CompletableFuture链中的外部流程

sql - 在 SQL 中计算百分比

MySql 同一查询的不同执行路径

java - 安卓 SQLite : Check if row exists in table

php - 检查多行 - PHP 和 MySQL