[JDBC PreparedStatement,当要设置的列在行与行之间变化时,请批量执行

问题描述 投票:0回答:2

我正在尝试使用PreparedStatement批量更新,其中所获取的数据因可用数据而异。

简单示例:

您有一个带有x和y列的表。您的inputdata是行的表示形式,其中仅显示已修改的列。因此,对于第1行,您具有x ='foo';对于第2行,您具有y ='bar'。为了用PreparedStatement批处理这些,您需要一个SQL语句:“ update table where x = ?, y =?where etc”。

我正在努力解决的方法是将您没有任何值的列设置为已经存在的值,但是我不确定这是否可行。在原始SQL中,您可以编写“ update table where x = x and y ='foo'where etc”,但是我还没有找到通过设置“?”来实现此目的的任何方法。参数作为对该列的引用,似乎不可能。

是否可以使用PreparedStatements处理这种情况?如果我的解释不好,我深表歉意。

java sql jdbc prepared-statement batch-processing
2个回答
1
投票

让我改写您的问题,如果正确,请告诉我:您希望能够有更新过程

  • 有时您只更新特定的x
  • 有时您只更新特定的y
  • 有时您需要更新特定的x和y组合

正确的吗?如果是,则下一个问题是实施可能性。

您建议尝试将列本身放入参数中。即使有可能,我仍然建议不要这样做。代码将变得混乱。

我建议您创建一个Java方法,该方法根据可用参数(x,y等)构建并返回查询字符串(或至少是'where'子句)用于调用JDBC Prepared语句的代码将调用该方法以获取查询字符串。您仍将从使用准备好的语句中受益。代价是您的数据库将缓存多个不同的语句而不是一个,但是我想这是一个最小的问题。


0
投票

假设您要设置的值都不为空,则可以使用类似如下的语句

update sometable set column1 = coalesce(?, column1), colum2 = coalesce(?, column2)

然后,当不应该更新值时,请使用具有适当PreparedStatement.setNull值的java.sql.Types或具有PreparedStatement.setXXX作为值的适当类型的null

© www.soinside.com 2019 - 2024. All rights reserved.