如何使用在mySQL上运行的JdbcTemplate以可扩展的方式执行以下SQL
。在这种情况下,可伸缩意味着:
声明如下:
INSERT INTO myTable (foo, bar) VALUES ("asdf", "asdf"), ("qwer", "qwer")
假设我有一个带有foo
和bar
字段的POJO列表。我意识到我可以遍历列表并执行:
jdbcTemplate.update("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMap)
但这并不能满足第一个条件。
我相信我也可以执行:
jdbcTemplate.batchUpdate("INSERT INTO myTable(foo, bar) VALUES (?, ?)", paramMapArray)
但是据我所知,这只会编译一次SQL并多次执行它,从而再次使第一个条件失败。
似乎通过了这两个标准的最终可能性是,自己使用来简单地构建SQL StringBuffer
,但我想避免这种情况。
实际上,多行插入(使用“行值构造函数”)是SQL-92标准的一部分。请参阅
http://en.wikipedia.org/wiki/Insert_(SQL)#Multirow_inserts。
一些数据库不支持此语法,但许多数据库支持。根据我的经验,Derby / Cloudscape,DB2,Postgresql和较新的Hypersonic
2。* +发行版都支持此功能。
您担心将其用作PreparedStatement是可以理解的,但是我已经看到类似的情况,其中Spring
JDBC会自动处理某些查询的项目集合(例如(?)中的where),但是我不能保证这种情况。
我确实在(无法在此帖子中添加第二个链接)找到了一些可能有用的信息,这可能会有所帮助。
我可以告诉您,从最严格的意义上讲,它可能无法满足您的第二个要求(适用于任意数量的参数):我使用的每个数据库都施加了查询长度限制,这将发挥作用。
问题内容: 根据Spring 文档,使用Spring JdbcTemplate的步骤如下: 然后, 基本上,JdbcTemplate是使用数据源的setter在Component类内部创建的。 这样做有什么问题,因此应用程序中只有一个jdbcTemplate实例吗? 然后将jdbcTemplate本身直接注入到组件中 有没有理由不能将jdbcTemplate本身直接注入到组件类中? SGB 问题答
问题内容: 是否可以使用一个insert语句在一个表中插入多行?我知道如果发生以下情况,将会发生这种情况: 但是,如果我想插入: 只需一个插入命令? 问题答案: 两种解决方案(来源:http : //appsfr.free.fr/spip.php?article21): 或者
问题内容: 如何使用php将多个数据插入mysql数据库。我尝试使用for循环,但没有运气。 问题答案: 只需在循环中构建查询,然后在循环竞争时执行查询即可 您还会注意到,我将您对数据库连接的包含移到了循环之外。无需重复拨打该电话。 另外,请确保您逃脱了要插入的那些值,或者使用参数化查询来进行插入,以防止SQL注入。
问题内容: 在Spring jdbc模板调用中,是否可以从SQL插入中获取@@ identity?如果是这样,怎么办? 问题答案: 该方法已重载,以获取一个称为GeneratedKeyHolder的对象,你可以使用该对象来检索自动生成的密钥。例如:
我已经读了很多关于这个错误的东西,但仍然没有发现错误。 作为我的params:[461,100,TO_TIMESTAMP('2015-01-28 00:00:01','yyyy-mm-dd hh24:mi:ss'),18888]这实际上是有效的。 任何形式的帮助都将不胜感激。提前感谢!
问题内容: 在Spring jdbc模板调用中,是否可以从SQL插入中获取@@ identity?如果是这样,怎么办? 问题答案: 该方法已重载,以获取一个名为GeneratedKeyHolder的对象,您可以使用该对象来检索自动生成的密钥。例如(从此处获取的代码):