我正在尝试使用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方法,该方法根据可用参数(x,y等)构建并返回查询字符串(或至少是'where'子句)用于调用JDBC Prepared语句的代码将调用该方法以获取查询字符串。您仍将从使用准备好的语句中受益。代价是您的数据库将缓存多个不同的语句而不是一个,但是我想这是一个最小的问题。
假设您要设置的值都不为空,则可以使用类似如下的语句
update sometable set column1 = coalesce(?, column1), colum2 = coalesce(?, column2)
然后,当不应该更新值时,请使用具有适当PreparedStatement.setNull
值的java.sql.Types
或具有PreparedStatement.setXXX
作为值的适当类型的null
。