在WHERE
为我的sql动态生成子句时,我喜欢将代码硬编码WHERE '1' = '1'
到sql中,因此不必跟踪是否AND
在每个后面的子句之前添加前缀。这在很多地方都有很好的文档证明,例如stackoverflow问题。
是否存在用于动态生成语句SET
子句的等效模式UPDATE
?我宁愿跟踪是否需要加逗号。如果没有通用的解决方案,这将用于通过jdbc与oracle数据库进行交互。
编辑对于我的特定用例,我将需要动态地更改要设置的列。因此,任何需要查询包含要设置的所有列的解决方案都是不可行的。我们有一个包含20多个列的表,但是在任何给定时间只有3或4个会改变。我们进行了一些负载测试,发现达到性能目标的唯一方法是仅发送需要更新的数据。现在,我只是想编写漂亮的代码来做到这一点。
为了添加逗号而避免跟踪列数的一种方法是始终分配所有可能的列,并传递一组控制变量来确定是否应分配列:
UPDATE MyTable
SET
col1 = CASE ? WHEN 1 THEN ? ELSE col1 END
, col2 = CASE ? WHEN 1 THEN ? ELSE col2 END
, col3 = CASE ? WHEN 1 THEN ? ELSE col3 END
WHERE
... -- condition goes here
奇数索引处的参数是传递的标志,用于指示必须设置相应的列。它们对应的偶数索引处的参数是您要设置的值,或者NULL
如果您未设置相应的字段。
这种方法使需要传递的JDBC参数数量增加了一倍,但作为回报,您得到一条声明,其中所有列的位置都是固定的,因此您可以准备和重用它而不是动态构建它。
问题内容: 我可以在C#中做到这一点: 例如在Java中 我如何查询这样的ArrayList?谢谢。 问题答案: Java 8引入了Stream API ,该API允许与Linq中的构造类似的构造。 例如,您的查询可以表示为: 如果存在默认值,您显然需要锻炼,在这种情况下,这似乎很奇怪,但是我已经展示了它,因为这就是您问题中的代码所做的。
问题内容: 我正在从xml配置转移到注释。我想转换一个会话范围的bean是 可以通过注释完成此操作吗?如果没有,我该怎么做才能使该声明继续工作? 问题答案: 在spring上下文xml中,执行以下操作: 请注意,尽管如此,你将需要为该包中的所有类编写接口。
我最近在我的SQLite数据库中添加了一个列,由于添加了这个列,我有一个按钮,它将一个数据库列的值设置为“1”或“0”,当这个按钮尝试使用updateData()时,我的应用程序开始崩溃,所以我认为这是我的问题所在,是updateData()的代码或语法问题 显示错误= android.database.sqlite.sqliteException:near“WHERE”:语法错误(代码1 SQL
iBatis中有一个更新方法,允许指定需要更新的行数(如果不匹配,则引发异常)。 MyBatis的sqlSession中是否有与此方法等效的方法?那些医生说没有。 以另一种方式实施此类检查的最佳方式是什么?
问题内容: 该表示法是: 实际上不哈希对象;它实际上只是转换为字符串(通过它是一个对象,还是其他各种原始类型的内置转换),然后在“ ”中查找该字符串,而不对其进行哈希处理。也不会检查对象是否相等-如果两个不同的对象具有相同的字符串转换,则它们将彼此覆盖。 鉴于此-在JavaScript中是否有任何有效的hashmap实现?(例如,第二个Google结果产生的实现对任何操作都是O(n)。其他各种结果
问题内容: 我正在尝试从Swift的iTunesU中的“开发适用于iPhone和iPad的ios7应用程序”中复制斯坦福Matchismo游戏。 在第3讲幻灯片的第77页上,它显示了使用,这不是Swift上的选项。Swift文档示例显示了一个具有数组的示例,但是我不知道如何使Interface Builder将多个插座连接到同一个/ Array。 有人知道如何做到这一点吗? 我知道我可以创建1