Java 为什么我不能对日期使用PreparedStatement.setObject?

Java 为什么我不能对日期使用PreparedStatement.setObject?,java,jdbc,oracle11g,jboss6.x,ojdbc,Java,Jdbc,Oracle11g,Jboss6.x,Ojdbc,根据Oracle advise for date()的说法,在一个非常大的Java应用程序中,我尝试替换: prepareStatement.setTimestamp(new Timestamp((new Date()).getTime())); 作者: 但是我得到了一个SQLException“无效列类型” 为什么? 我试着用最简单的方式执行相同的代码,它正在工作 我的假设是,应用程序中的某个地方有一段代码阻止我使用此代码 什么样的代码可以做到这一点 查询: select * from SO

根据Oracle advise for date()的说法,在一个非常大的Java应用程序中,我尝试替换:

prepareStatement.setTimestamp(new Timestamp((new Date()).getTime()));
作者:

但是我得到了一个SQLException“无效列类型”

为什么?

我试着用最简单的方式执行相同的代码,它正在工作

我的假设是,应用程序中的某个地方有一段代码阻止我使用此代码

什么样的代码可以做到这一点

查询:

select * from SOMETABLE where WFSTATE IN (100, 300) OR WFTIMEOUTTIME < ? 
Oracle数据库版本:Oracle XE 11.2.0-1

OJdbc版本:ojdbc6 11.2.0.3

服务器:JBoss AS 6,带有数据源:

<local-tx-datasource>
    <jndi-name>jdbc/Sonora</jndi-name>
    <connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
    <user-name>sonora</user-name>
    <password>password</password>
    <min-pool-size>20</min-pool-size>
    <max-pool-size>20</max-pool-size>
    <prepared-statement-cache-size>50</prepared-statement-cache-size>
    <connection-property name="oracle.jdbc.timezoneAsRegion">false</connection-property>
    <new-connection-sql>alter session set nls_comp='ansi' nls_sort='GENERIC_BASELETTER' nls_language='FRENCH'</new-connection-sql>
</local-tx-datasource>

jdbc/Sonora
jdbc:oracle:thin:@localhost:1521:XE
oracle.jdbc.driver.OracleDriver
事务读取已提交
索诺拉
密码
20
20
50
假的
alter session set nls_comp='ansi'nls_sort='GENERIC'u BASELETTER'nls_language='FRENCH'

您可以发布您的SQL语句吗?和表模式?您使用的Java类型是什么?它显然不是
java.util.Date
java.sql.Date
。JDBC驱动程序不理解您传递给它的任何任意类型。@Jesper我使用的是oracle.sql。DATE@Gaël谢谢,完成了。您确定您的OJDBC版本支持
oracle.sql.DATE
CREATE TABLE "DB"."SOMETABLE" 
(   "ASSIGNEEID" VARCHAR2(128 BYTE), 
"MISSIONREPKEY" VARCHAR2(128 BYTE), 
"PROCESS_CASEFOLDERID" VARCHAR2(200 BYTE), 
"S_DISPATCH" VARCHAR2(8 BYTE), 
"S_EVENTSEQUENCE" NUMBER(10,0), 
"S_EVENTTIME" DATE, 
"S_GOALCATEGORY" VARCHAR2(64 BYTE), 
"S_WORKSTART" DATE, 
"S_WORKTIME" NUMBER(10,0),
"WFCALLERRTID" NUMBER(18,0), 
"WFCALLERWFID" NUMBER(10,0), 
"WFFLOWENTRYTIME" DATE, 
"WFFLOWEXITTIME" DATE, 
"WFLOCKTIME" DATE, 
"WFLOCKTYPE" NUMBER(10,0), 
"WFLOCKUSER" VARCHAR2(128 BYTE), 
"WFPARENTID" NUMBER(18,0), 
"WFPRIORSTEPNAME" VARCHAR2(128 BYTE), 
"WFRANDOM" NUMBER(10,0), 
"WFROUTINGTICKETID" NUMBER(18,0), 
"WFSTATE" NUMBER(10,0), 
"WFSTEPENTRYTIME" DATE, 
"WFTIMEOUTTIME" DATE, 
"WFWORKITEMID" NUMBER(18,0), 
"WFWORKSTEPNAME" VARCHAR2(128 BYTE), 
"WORKFLOWID" NUMBER(10,0), 
"WORKFLOWVERSION" NUMBER(10,0)
) (...);
<local-tx-datasource>
    <jndi-name>jdbc/Sonora</jndi-name>
    <connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
    <user-name>sonora</user-name>
    <password>password</password>
    <min-pool-size>20</min-pool-size>
    <max-pool-size>20</max-pool-size>
    <prepared-statement-cache-size>50</prepared-statement-cache-size>
    <connection-property name="oracle.jdbc.timezoneAsRegion">false</connection-property>
    <new-connection-sql>alter session set nls_comp='ansi' nls_sort='GENERIC_BASELETTER' nls_language='FRENCH'</new-connection-sql>
</local-tx-datasource>