Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用日期输入调用Oracle存储过程不会设置HH:MM:SS_Java_Oracle_Jakarta Ee_Stored Procedures_Jdbc - Fatal编程技术网

Java 使用日期输入调用Oracle存储过程不会设置HH:MM:SS

Java 使用日期输入调用Oracle存储过程不会设置HH:MM:SS,java,oracle,jakarta-ee,stored-procedures,jdbc,Java,Oracle,Jakarta Ee,Stored Procedures,Jdbc,我试图使用Spring“CallableStatementCreator”调用JavaEEWeb应用程序Java中的Oracle存储过程。存储过程的输入之一是日期 我的attributeValue是一个java.util.date,它正确地保存DD-MM-YYYY和HH:MM:SS。 使用以下代码时: callableStmt.setTime(6, new java.sql.Time(attributeValue.getTime())); 结果是存储过程最终写入数据库的数据库列被设置为1970

我试图使用Spring“CallableStatementCreator”调用JavaEEWeb应用程序Java中的Oracle存储过程。存储过程的输入之一是日期

我的attributeValue是一个java.util.date,它正确地保存DD-MM-YYYY和HH:MM:SS。 使用以下代码时:

callableStmt.setTime(6, new java.sql.Time(attributeValue.getTime()));
结果是存储过程最终写入数据库的数据库列被设置为1970-01-01,正确的HH:MM:SS I作为输入传递。这在我的应用程序的前一个版本中起作用,我使用了JDBClib10.x.x.x

如果我使用

callableStmt.setDate(6, new java.sql.Date(attributeValue.getTime()));
DD-MM-YYYY设置正确,但小时设置为00:00:00

那么,调用该属性并将其传递给该存储过程的正确方法是什么?还有,有什么调试技巧吗

Oracle数据库11g企业版11.2.0.2.0版-64位生产 Oracle JDBD库:ojdbc6-11.2.0.3

请尝试使用:

使用

在我的例子中,如果我有一个重载的存储过程,那么我的3个函数之间的唯一区别就是最后一个参数:VARCHAR2、DATE或NUMBER。使用此代码时,存储过程的执行失败,因为Oracle无法找到要使用的方法。可能是因为JDBC库没有将timestamp映射到DATE列,如前所述

唯一有效的方法是:

callableStmt.setObject(6, new java.sql.Timestamp(attributeValue.getTime()), OracleTypes.DATE);
这似乎强制在Oracle存储过程中的“我的时间戳到日期”列之间进行映射,同时保留DD-MM-YYYY和HH:MM:SS。

使用

callableStmt.setTimestamp(6, new java.sql.Timestamp(attributeValue.getTime()));
在我的例子中,如果我有一个重载的存储过程,那么我的3个函数之间的唯一区别就是最后一个参数:VARCHAR2、DATE或NUMBER。使用此代码时,存储过程的执行失败,因为Oracle无法找到要使用的方法。可能是因为JDBC库没有将timestamp映射到DATE列,如前所述

唯一有效的方法是:

callableStmt.setObject(6, new java.sql.Timestamp(attributeValue.getTime()), OracleTypes.DATE);

这似乎强制在Oracle存储过程中我的Timestamp to DATE列之间进行映射,同时保留DD-MM-YYYY和HH:MM:SS。

Oracle在从Oracle 10移动到Oracle 11时在ojdbc6.jar中对此进行了更改。在此之前,设置日期和时间,我想这是一个bug。Oracle在从Oracle10迁移到Oracle11时,在ojdbc6.jar中对此进行了更改。在此之前,设置日期和时间,我猜这是一个错误。我的存储过程输入被定义为日期中的I_值,因此不起作用:当执行存储过程时,它说它找不到它,因为类型不匹配根据[,您可能需要将SQL日期映射到java.SQL.Timestamp.hmm的Oracle JDBC版本,这是很好的线索,但我使用的是11.2.0.3,它应该映射它,但它仍然没有…我有3个同名的存储过程,只是最后一个in参数中的一个不同类型,我得到了一个错误,Oracle将3个过程匹配到了我的inputMy存储过程Inputut被定义为日期中的i_值,因此它不起作用:当执行存储过程时,它说它找不到它,因为类型不匹配[,您可能需要将SQL日期映射到java.SQL.Timestamp.hmm的Oracle JDBC版本,很好的线索,但我使用的是11.2.0.3,它应该映射它,但它仍然没有…我有3个同名的存储过程,只是最后一个in参数中的一个不同类型,我得到了错误,Oracle将3个过程匹配到了我的输入。请解释一下r代码。简单的一行可以作为注释发布。请解释您的代码。简单的一行可以作为注释发布。