the*_*hip 5 java oracle spring jdbc spring-jdbc
我正在开发一个需要对 Oracle 数据库进行 JDBC 调用的项目。我已经设置了 UCP 池来与 SpringJDBC 一起使用。我有一个相当简单的查询,我正在执行如下所示......
SELECT * FROM TABLE WHERE ID IN (:ids)
我设置此查询的java代码如下所示...
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(datasource);
Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("ids", Arrays.asList(idArray));
List<Result> results = template.query("SELECT * FROM TABLE WHERE ID IN (:ids)",
paramMap, new ResultRowMapper());
Run Code Online (Sandbox Code Playgroud)
只要数组中只有 1 个 id,这一切都可以正常执行。当我添加第二个 ID 时,查询需要近 5 分钟才能运行。如果我采用精确的查询并在 SQLDeveloper 中执行它,则需要 0.093 秒。
我的代码或配置一定出了严重的问题...有人有什么想法吗?
编辑:
我去掉了 Spring NamedParameterJdbcTemplate 的使用,直接使用 Jdbc,一切似乎都表现良好。NamedParameterJdbcTemplate 的做法有何不同?
好吧,我发现在这种情况下我的直接 jdbc 解决方案和我的 spring-jdbc 解决方案之间存在差异...看来正如下面的 @Annjaawn 所解释的,这是一个绑定变量问题而不是 spring-jdbc 问题。我的 spring-jdbc 问题是尝试将变量绑定到索引(不存在),从而进行表扫描...
我的直接 JDBC 解决方案最终只是进行字符串替换并执行,因此没有表扫描...
下面的链接解释了其中的区别。
http://bytes.com/topic/oracle/answers/65559-jdbc-oracle-beware-bind-variables
| 归档时间: |
|
| 查看次数: |
10196 次 |
| 最近记录: |