将 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.sql.date

尝试将数据插入数据库表时,java.util.Date 无法转换为 java.sql.Date [关闭]

如何将 LocalDate 转换为 SQL Date Java?

java.util.Date和java.sql.Date的区别及应用

在java中如何将String类型转换成java.sql.Date类型