Java 为什么我不能对日期使用PreparedStatement.setObject?
根据Oracle advise for date()的说法,在一个非常大的Java应用程序中,我尝试替换: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
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>