当前位置: 首页 > 知识库问答 >
问题:

Spring JDBC批量更新查询,无需准备语句

吕天逸
2023-03-14

我有一个遗留代码,不允许使用预先准备好的语句。它使用Spring JDBC和更新查询。要求更新100000行。我有一张地图,上面有行号和需要在特定列中更新的值。

下面是我的当前代码

            for(String seq: recordIdMap.keySet()){

            Object[] parameters = new Object[2];
            parameters[0] = seq;
            parameters[1] = recordIdMap.get(seq); 
//<setting the params in query using manual string replace- earlier query has (1) (2) ... in query . This is not prepared statement>
                getJdbcTemplate().update(query);
        }

我需要将其更改为批量执行,以便在for循环之后,我可以在一次DB命中中执行它。

对于这个需求,使用spring JDBC批处理更新的最佳方式是什么?

共有1个答案

郭远
2023-03-14

我会读取所有内容并将其转换为对象数组列表,然后运行batchUpdate。

List<Object[]> params = new ArrayList<Object[]>();
for(Entry<String,String> entry : recordIdMap.entrySet())
    params.add(new Object[] {entry.getKey(), entry.getValue()});

getJdbcTemplate().batchUpdate(query, params);

希望有帮助

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 如何在MySQL语句中包含PHP变量 (10个答案) 4个月前关闭。 我有一个使用以下代码的mysqli查询: 但是,所有数据都是从HTML文档中提取的,因此为了避免错误,我想使用准备好的语句。我找到了PHP文档,但没有UPDATE示例。 问题答案: 一个与插入或选择相同。只需将所有变量替换为。

  • 问题内容: 我试图用大约50,000行10列填充Java中的resultSet,然后使用的方法将它们插入到另一个表中。 为了使过程更快,我进行了一些研究,发现在将数据读入resultSet时,fetchSize起着重要的作用。 如果fetchSize太低,可能会导致到服务器的行程过多,而fetchSize太高则会阻塞网络资源,因此我做了一些尝试,并设置了适合我的基础结构的最佳大小。 我正在阅读此r

  • 以下代码在准备时失败: 我发现:警告:mysqli::prepare()[mysqli.prepare]:无法获取mysqli。。。我在上面的代码中做错了什么?我检查了语法文档,但是如果我尝试将查询作为sql进行pas,我会得到一个语法错误。对于mysqli语法错误是否有一个好的调试工具?

  • 我在调试中不断看到这个错误。登录cassandra, 在这个里面 因此,根据Cassandra中的这个标签,https://github . com/krasserm/akka-persistence-Cassandra/issues/33,我看到这是由于输入有效负载大小的增加,所以我将cassandra.yml中的< code > commit log _ segment _ size _ in

  • 我有一个搜索查询,它必须使用包含搜索搜索表中的一列。列上有CTXSYS.Context类型索引。当使用prepared语句在表中获取数据时,搜索查询不能处理像-、/、_等特殊字符。

  • 我试图将预准备语句与跨表更新结合使用。我已经准备了一个代表我们更大数据库的示例脚本。这第一部分做我想要的没有准备好的语句,但我希望避免复制/粘贴我的数据的每一列。 这就是为什么我尝试了这样的东西作为更新函数的替代品。然而,我经常收到语法错误报告。有人能指出我哪里出错了吗?这将是非常感谢!