Java 日期字段未正确更新。存档日期更新为12:00:00AM,而不是原始值

Java 日期字段未正确更新。存档日期更新为12:00:00AM,而不是原始值,java,oracle,jakarta-ee,oracle10g,oracle9i,Java,Oracle,Jakarta Ee,Oracle10g,Oracle9i,我有一个以“Date”为参数的存储过程 该过程是从函数调用的,而函数又是从Java代码调用的 我将Java代码中的日期作为参数传递 现在的问题是存储过程没有在DB的“日期”列中更新正确的时间 日期得到正确更新,但时间使用默认值12:00:00AM而不是原始值进行更新 我使用DBMS\u SQL.EXECUTE方法从函数调用存储过程 JAVA代码: 导入java.sql.CallableStatement; 导入java.sql.ResultSet 导入org.hibernate.Session

我有一个以“Date”为参数的存储过程

该过程是从函数调用的,而函数又是从Java代码调用的

我将Java代码中的
日期作为参数传递

现在的问题是存储过程没有在DB的“日期”列中更新正确的时间

日期
得到正确更新,但时间使用默认值
12:00:00AM
而不是原始值进行更新

我使用
DBMS\u SQL.EXECUTE
方法从函数调用存储过程

JAVA代码:

导入java.sql.CallableStatement;
导入java.sql.ResultSet
导入org.hibernate.Session; 导入org.hibernate.SessionFactory; 导入org.hibernate.Transaction; 导入org.hibernate.cfg.Configuration
公共类StackOvFlow{
/** * *@param args */
公共静态void main(字符串[]args){ 字符串状态=”; 试一试{ System.out.println(“主目录中”);
int userId=1360822386; StringBuffer batchUpdateSQL=新建StringBuffer(“开始”); StringBuffer updateSQLnew=null; 字符串日期=“2012年7月30日10:30:00”;
字符串currDate=“to_date”(“+”“+date+”) +“,'DD-MON-yyyyyyyyyh24:MI:SS')”;
updateSQLnew=新的StringBuffer( “开始打包备份登录。跟踪用户(” +用户ID + ",'" +咖喱 + "" +“”;BufferMgr.app_错误_退出然后回滚时出现异常;返回;结束;“”;
batchUpdateSQL.append(updateSQLnew);
batchUpdateSQL .append(“BufferMgr.app出错时异常\u退出然后回滚;返回;结束;”;
System.out.println(“输入:”;
System.out.println(batchUpdateSQL);
String res=getMonthlySave(batchUpdateSQL.toString()); System.out.println(“响应:+res);
}捕获(例外e){ 系统输出打印项次(“例外”+e); e、 printStackTrace(); } System.out.println(状态);
}
公共静态字符串getMonthlySave(字符串plSqlBlk){
字符串输出=”; System.out.println(“IN-GET-MONTHLY-SAVE”);
会话=空;
CallableStatement cstmt=null;
结果集rs=null;
SessionFactory SessionFactory=新配置()。配置( “hibernate.cfg.xml”)
.buildSessionFactory();
session=sessionFactory.openSession();
事务处理=session.beginTransaction();
试试{
系统输出
.println(“*调用SP***”;
cstmt=session.connection().prepareCall(
“{调用PKG_THR.P_UPDT(?,)}”);
cstmt.setFetchSize(10000);
cstmt.registerOutParameter(1,
oracle.jdbc.driver.OracleTypes.CURSOR); cstmt.setInt(2186);
cstmt.setString(3,plSqlBlk); cstmt.execute();
rs=(ResultSet)cstmt.getObject(1); int size=rs.getFetchSize();
System.out.println(“提取的大小为”+size);
而(rs.next()){
输出=输出+rs.getString(1);
} System.out.println(“输出:::::”;
System.out.println(输出);
}捕获(例外e){
系统输出
.println(“在fetchdetails中执行查询时发生异常……);
e、 printStackTrace();
}
最后{
transaction.commit();
session.close();
} 返回输出; }
}

PL/SQL函数:

CREATE or REPLACE PACKAGE BODY PKG_THR AS FUNCTION P_UPDT(login_id number,plsql_block varchar2) RETURN cursor_type IS louvtBuff a_XMLBUFFER_TABLE; loutRowBuff a_XMLBUFFER_TABLE := a_XMLBUFFER_TABLE(); EXIT_MESSAGE EXCEPTION; lreturn number; offset BINARY_INTEGER := 1; kount BINARY_INTEGER := 5; ln_dbms_cur NUMBER; ln_cur_execute NUMBER; j number := 1; i number;
buffout cursor_type; BEGIN BufferMgrXML.CLEARBUFFER; BEGIN pkg_glbl.g_login_id := login_id; pkg_glbl.g_connect:='1';
ln_dbms_cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(ln_dbms_cur,plsql_block,DBMS_SQL.NATIVE);
ln_cur_execute := DBMS_SQL.EXECUTE(ln_dbms_cur);
EXCEPTION WHEN BufferMgr.app_errors_exit then lreturn := BufferMgrXML.getXML(louvtBuff,1,1); RAISE EXIT_MESSAGE; END;

创建或替换 包装体组件 函数P_UPDT(登录id号,plsql_块varchar2)返回游标类型为 louvtBuff a_XMLBUFFER_表; loutRowBuff a_XMLBUFFER_表:=a_XMLBUFFER_表(); 退出消息异常; lreturn编号; 偏移二进制_整数:=1; kount二进制_整数:=5; ln_dbms_cur编号; ln\u cur\u执行编号; j数:=1; i编号
buffout游标类型; 开始 BufferMgrXML.CLEARBUFFER; 开始 pkg_glbl.g_login_id:=login_id; pkg_glbl.g_connect:='1'
ln_dbms_cur:=dbms_SQL.OPEN_游标
PARSE(ln_DBMS_cur,plsql_块,DBMS_SQL.NATIVE)
ln\u cur\u execute:=DBMS\u SQL.execute(ln\u DBMS\u cur)
例外情况 当BufferMgr.app\u出错\u退出时 lreturn:=BufferMgrXML.getXML(louvtBuff,1,1); 发出退出消息; 结束;

由于没有太多的代码可供观察,因此很难准确判断这种情况下的错误


非常典型的原因是使用,它将所有时间字段设置为0。如果是这种情况,您可以改为使用(会损失几分秒)。

请发布一些代码-根据您的描述,听起来日期传递不正确,oracle默认为午夜,因为您输入的格式不正确。我已经发布了代码。任何帮助都将不胜感激。

CREATE or REPLACE PACKAGE BODY PKG_THR AS FUNCTION P_UPDT(login_id number,plsql_block varchar2) RETURN cursor_type IS louvtBuff a_XMLBUFFER_TABLE; loutRowBuff a_XMLBUFFER_TABLE := a_XMLBUFFER_TABLE(); EXIT_MESSAGE EXCEPTION; lreturn number; offset BINARY_INTEGER := 1; kount BINARY_INTEGER := 5; ln_dbms_cur NUMBER; ln_cur_execute NUMBER; j number := 1; i number;
buffout cursor_type; BEGIN BufferMgrXML.CLEARBUFFER; BEGIN pkg_glbl.g_login_id := login_id; pkg_glbl.g_connect:='1';
ln_dbms_cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(ln_dbms_cur,plsql_block,DBMS_SQL.NATIVE);
ln_cur_execute := DBMS_SQL.EXECUTE(ln_dbms_cur);
EXCEPTION WHEN BufferMgr.app_errors_exit then lreturn := BufferMgrXML.getXML(louvtBuff,1,1); RAISE EXIT_MESSAGE; END;