将 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 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章