将 java.sql.date 传递给 netezza jdbc 驱动程序
Posted
技术标签:
【中文标题】将 java.sql.date 传递给 netezza jdbc 驱动程序【英文标题】:Passing java.sql.date to netezza jdbc driver 【发布时间】:2011-01-23 09:53:13 【问题描述】:当在 PreparedStatement 中将 Java.Sql.Date 作为绑定变量(我的查询文本中的问号)传递给 nzjdbc.jar 时,我得到:
pg_atoi:“2010-02-01”中的错误:无法解析“-02-01”
什么给了?我认为 JDBC 驱动程序的全部目的是解决这些问题:(
【问题讨论】:
我现在可以缩小范围了。该问题仅在 SQL 采用以下形式时重现:select * from baa where start_date <= ? - 30
,并且在删除“- 30”时不会重现。我的猜测:当您指定 - 30 时,Netezza 正在尝试将绑定变量解析为日期以外的其他内容。
【参考方案1】:
好的,找到答案了,与JDBC无关。
将日期变量传递给 JDBC 时,它所做的只是将其转换为符合 Netezza 日期样式的文字字符串,例如'2011-11-06 00:00:00'。它不会用 cast 或 to_date 或任何东西包装它。
但是,当您从任何 Netezza 客户端尝试 select '2011-11-06 00:00:00' - 30
时,您会收到 pg-atoi 解析错误,因为 Netezza 尝试将字符串解析为数字,而不是作为日期。 p>
解决方案:select cast('2004-02-22 00:00:00.000' as date) - 30 as bla;
它的所有宇宙爱宝贝。
【讨论】:
令我困惑的是,Netezza jdbc 驱动程序在将日期发送到数据库之前将其转换为字符串...以上是关于将 java.sql.date 传递给 netezza jdbc 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
Java中为啥将java.util.Date类型的变量已转换为java.sql.Date,进行插入操作时仍报错?
尝试将数据插入数据库表时,java.util.Date 无法转换为 java.sql.Date [关闭]
如何将 LocalDate 转换为 SQL Date Java?