簡體   English   中英

Spring Jdbc將java.sql.timestamp綁定到Oracle日期問題

[英]Spring Jdbc binding java.sql.timestamp to oracle date issue

我目前正在使用Spring的NamedParameterJdbcTemplate將一些值注入sql。 當我將兩個java.sql.Timestamp值注入到oracle列為DATE類型並執行的sql中時,出現性能問題。

它非常慢(大約4分鍾),但是當我通過sql developer運行它時,它執行不到一秒鍾,因為我在該DATE列上有一個索引。 這是我的調試日志的片段:

select * from test_table.test_column where eventts >= :startDate and eventts <= :endDate and loginname= :loginname and channelind= :channelind
2014-04-21 15:02:50 48416 [http-8080-1] DEBUG org.springframework.jdbc.core.JdbcTemplate  - Executing prepared SQL query
2014-04-21 15:02:50 48417 [http-8080-1] DEBUG org.springframework.jdbc.core.JdbcTemplate  - Executing prepared SQL statement [select * from test_table.test_column where eventts >= ? and eventts <= ? and loginname= ? and channelind= ?]
2014-04-21 15:02:50 48417 [http-8080-1] DEBUG org.springframework.jdbc.datasource.DataSourceUtils  - Fetching JDBC Connection from DataSource
2014-04-21 15:02:50 48438 [http-8080-1] DEBUG org.springframework.jdbc.core.StatementCreatorUtils  - Setting SQL statement parameter value: column index 1, parameter value [2014-04-21 12:02:38.0], value class [java.sql.Timestamp], SQL type 93
2014-04-21 15:02:50 48439 [http-8080-1] DEBUG org.springframework.jdbc.core.StatementCreatorUtils  - Setting SQL statement parameter value: column index 2, parameter value [2014-04-22 00:00:00.0], value class [java.sql.Timestamp], SQL type 93
2014-04-21 15:02:50 48439 [http-8080-1] DEBUG org.springframework.jdbc.core.StatementCreatorUtils  - Setting SQL statement parameter value: column index 3, parameter value [MY_LOGIN], value class [java.lang.String], SQL type unknown
2014-04-21 15:02:50 48439 [http-8080-1] DEBUG org.springframework.jdbc.core.StatementCreatorUtils  - Setting SQL statement parameter value: column index 4, parameter value [WEB], value class [java.lang.String], SQL type unknown

我在這里想念什么? Oracle是否將值強制轉換為TIMESTAMP從而導致丟失“ eventts” DATE列上的索引?

我想你的猜測是對的。 當你有

select something from some_table where column1 = :val1

並且va1與column1的類型不同,Oracle將這樣做:

select something from some_table where to_val1type(column1) = :val1

函數to_val1type不存在,它將由上下文(TO_DATE,TO_NUMBER等)決定。

或者使您的參數具有相同的類型,或者自己使用TO_XXX功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM