问题标签 [jdbctemplate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
22968 浏览

spring - 来自 Spring JDBCTemplate 查询方法的结果集元数据

有什么方法可以从 jdbctemplate 查询方法之一获取结果集对象?

我有一个类似的代码

我想执行存储在 finalQuery 字符串中的 sql 语句并获取结果集。该查询是对 6 到 7 个表的复杂连接,我从每个表中选择 4-5 列,并希望获取这些列的元数据以将数据类型和数据转换到下游系统。

如果它是一个简单的查询并且我只从一个表中获取我可以使用 RowMapper#mapRow 并且在该 maprow 方法中我可以调用 ResultsetExtractor.extractData 来获取结果列表;但在这种情况下,我的查询中有复杂的连接,我试图从结果集元数据中获取结果集对象......

上面的代码不好,因为对于每个结果,它都会返回相同的结果集对象,我不想将它们存储在列表中......

还有一点是,如果我的查询中的每个结果都调用了 maprow,那么即使我的列表引用了 RS 对象,JDBCTemplate 也会关闭 rs 和连接吗?

有没有像 jdbcTemplate.queryForResultSet(sql) 这样的简单方法?

现在我已经实现了自己的 ResultSet Extractor 来处理数据并将其插入下游系统

这个 CustomResultSetProcessor 实现了 ResultSetExtractor 并且在 extractData 方法中我调用了 3 种不同的方法 1 是从 rs.getMetaData() 中获取 ColumnTypes ,其次是通过运行获取目标元数据的列类型

在第三种方法中,我正在构建插入语句(准备好的)表单目标列类型,最后使用

希望这对其他人有帮助...

0 投票
2 回答
24666 浏览

sql - 我可以为单个查询设置 JDBC 超时吗?

我在 Tomcat 上有一个 Web 应用程序,它处理数据库连接池,并使用 Spring JDBCTemplate 执行查询。有人要求我实现一个状态页面,该页面将由心跳进程监控以确定服务器是否一切正常。

作为其中的一部分,我想做一个数据库查询以确定与数据库的连接是否正常。理想情况下,由于它只是“从 '中选择 1”,我希望它在 10 秒内快速返回,以表明如果数据库在那段时间内没有响应则表示失败。

但是,我不想将连接更改为正常请求的快速超时。

有没有办法使用原始 JDBC 或 Spring JDBC 包装器设置每个查询超时?

0 投票
3 回答
25743 浏览

java - 对使用 Spring JDBC 的 DAO 类进行单元测试

我有几个 DAO 对象用于从数据库中检索信息,我真的很想为它们编写一些自动化测试,但我很难弄清楚如何去做。

我正在使用 SpringJdbcTemplate运行实际查询(通过准备好的语句)并将结果映射到模型对象(通过RowMapper类)。

如果我要编写单元测试,我不确定我将/应该如何模拟对象。例如,由于只有读取,我会使用实际的数据库连接而不是模拟 jdbcTemplate,但我不确定这是否正确。

这是批处理中最简单的 DAO 的(简化)代码:

任何想法将不胜感激。

谢谢!

0 投票
2 回答
2283 浏览

java - Springs SimpleJdbcInsert 不会按预期生成自动生成的密钥

我正在使用 springs SimpleJdbcInsert 来执行 JDBC 插入返回 2 个自动生成的键。

我使用的命令是:

keys只包含一个名为SCOPE_IDENTITY()

日志似乎表明事情进展顺利,除了 TRANSACTIONID 和 ROWID 的自动生成的键没有被填充,这里有一些相关的日志

0 投票
1 回答
1083 浏览

java - 使用 Spring jdbcTemplate 在 MS Access 中更新日期

我正在使用 MS Access 和 Spring Jbdc 模板。

如果我尝试使用 jdbctemplate 更新表中的日期,则会出现错误

这是代码:

提前致谢, 桑托什

0 投票
2 回答
6416 浏览

postgresql - Spring JDBC - 最后插入的 id

我正在使用 Spring JDBC。是使用 Spring Framework 获取最后插入的 ID 的简单方法还是我需要使用一些 JDBC 技巧?

我发现了类似下面的东西,但我得到了:org.postgresql.util.PSQLException: Returning autogenerated keys is not supported.

0 投票
2 回答
1573 浏览

oracle - 没有主键缺失插入的 Oracle 批量插入

我正在尝试使用 ojdbc14.jar 驱动程序和 Spring 的 SimpleJdbcTemplate batchUpdate 方法将超过 100,000 条记录插入到没有主键的 Oracle 9i 表中。这是我的代码片段:

}

inputData List、dataArray、batch length 的大小都是相同的期望值。batchUpdate 在没有抛出任何异常的情况下完成,随后的 for 循环不打印任何内容,因为插入的数组中的每个项目都返回 -2(成功)。但是,只有 42,000 条记录保留到目标表,而不是预期的 100,000 多条记录。

如果我将 batchUpdate 替换为循环输入集合并执行每个项目的更新,则将保留 100,000 多条记录。但是,我想使用 batchUpdate 来利用改进的性能。

有人对为什么 batchUpdate 不起作用有任何想法吗?我不禁认为这与缺少主键有关。

以下是用于填充 inputData 列表的源表中的数据:

这是batchUpdate之后持久化的内容:

源表中的 24 行在目标表中也应该有 24 行,但只有 11 行被填充。

0 投票
2 回答
1870 浏览

java - Spring 的 NamedParameterJDBCTemplate 加入 Hibernate 的会话?

下面是一个简短的问题:如何让 Spring 的 NamedParameterJDBCTemplate 加入 Hibernate 的会话?我们有一个使用 Spring 和 Hibernate 的应用程序,我们的整个数据层都使用 Hibernate。但是现在有一个用例,我们有一个父对象,整个休眠逻辑都已到位。父对象有许多(> 4000)细节,我们确实想使用 Spring 的 jdbctemplate 插入,所有这些都在一个事务中(而不是使用休眠)。父对象被保存,父对象的 id(它是一个 oracle 序列)被设置,并且可以通过对象读取。我们只需要提交才能永久存储它。事务边界设置在一个方法上,该方法也会触发 4000 多个 jdbctemplate 插入细节。细节,即细节,确实需要对父对象的引用,即父对象的 id,在执行 4000 多个插入时可用。但是在插入第一个细节时,我得到了一个

integrity constraint (FK_008) violated - parent key not found

我想我明白这一点,因为 jdbctemplate 可能正在使用另一个会话,因此是另一个事务。我尝试在执行 4000+ 次插入的方法上设置 propegation:required 事务属性,期望事务的加入足以读取新的未提交父 ID,但这显然还不够。我希望我能以某种方式将休眠会话连接到 spring 的 jdbctemplate 但到目前为止我还不能这样做。SpringJDBC 以dataSource 作为参数,jtatransaction manager 以Hibernate SessionFactory 为参数,到目前为止,我觉得东西方是东西方,永远不会相遇。还有其他方法可以让 Spring 的 jdbctemplate 参与 Hibernate 的 Session 吗?(除了追求父母的承诺'

HibernateSessionFactory是一个 org.springframework.orm.hibernate3.LocalSessionFactoryBean ,其 dataSource 作为参数之一。

TransactionManager是 org.springframework.orm.hibernate3.HibernateTransactionManager 获取 sessionFactory 作为参数。

NamedParameterJDBCTemplate在sqlInserter的 setter 中创建:

希望有人可以在这里帮助我。

干杯,杰伦

0 投票
2 回答
32795 浏览

java - Spring JDBCTemplate 给出 InvalidResultSetAccessException 无效的列索引

我使用 SpringSimpleJDBCTemplate访问 Oracle DB。这是我的代码。

行映射器是:

该sql经过测试可以正常工作。

异常堆栈跟踪:

谢谢。

0 投票
3 回答
2343 浏览

java - 使用spring jdbctemplate从数据库填充pojo

通过允许spring自动检测与列匹配的数据成员的名称,是否可以在不创建映射器的情况下填充对象(pojo)?我期待有类似于 SimpleJdbcInsert 的东西,我在其中使用如下:

谢谢!