[英]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.