java Date类型插入orcale数据库是出现时分秒丢失现象

    做一些java项目是和数据库打交道是不可避免的,本人在一次将数据插入orcale数据库时Date类型字段插入时时分秒莫名其妙的就丢失了,在debug过程中发现在Date类型是时分秒是存在的,但是在这里要注意的是java.util.Date类型的是不可以直接插入数据库的。那么问题出在什么地方呢,在我继续debug的时候发现在转换为课插入数据库的java.sql.Date后该字段就没有了时分秒,这时候经过百度,API的指导,我发现sql.Date是不存在精度到时分秒的,所以解决办法为:

	/***
	 * 将传递过来的字符串转化为Timestamp类型
	 * @param s
	 * @return
	 */
	public Timestamp toDate(String s){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d = null;
		try {
			d = sdf.parse(s);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return new java.sql.Timestamp(d.getTime());
		
	}

        这里是在java中使用存储过程:

			CallableStatement call  = session.connection().prepareCall(
					"{call P_BUSINESS(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
			call.setLong(1, ci.getID());
			call.setString(2, ci.getINTERFACE_code());
			call.setString(3, ci.getNODE());
			call.setString(4, ci.getSUMMARY());
			call.setString(5, ci.getDATA_TYPE());
			call.setDouble(6, ci.getBUSSINESS_now());
			call.setDouble(7, ci.getUSER_now());
			call.setTimestamp(8, ci.getCOLLECT_time());
			call.setString(9, ci.getDATA_info());
			call.setString(10, ci.getDATA_info2());
			call.setString(11, ci.getDATA_info3());
			call.setTimestamp(12, ci.getRECV_time());
			call.setInt(13, ci.getSENDFLAG());
			call.setInt(14, ci.getWARNING_ID());
			call.executeQuery();
</pre><pre name="code" class="java">   附上存储过程:
</pre><pre name="code" class="java"><pre name="code" class="sql">create or replace procedure P_BUSINESS(ID IN OUT NUMBER,INTERFACE_CODE IN OUT VARCHAR2,NODE IN OUT VARCHAR2,SUMMARY IN OUT VARCHAR2,DATA_TYPE IN OUT VARCHAR2,BUSSINESS_NOW IN OUT NUMBER,USER_NOW IN OUT NUMBER,COLLECT_TIME IN OUT DATE,DATA_INFO IN OUT VARCHAR2,DATA_INFO2 IN OUT VARCHAR2,DATA_INFO3 IN OUT VARCHAR2,RECV_TIME IN OUT DATE,SENDFLAG IN OUT NUMBER,WARNING_ID IN OUT NUMBER) is
begin
  insert into T_BUSINESS(ID,INTERFACE_CODE,NODE,SUMMARY,DATA_TYPE,BUSSINESS_NOW,USER_NOW,COLLECT_TIME,DATA_INFO,DATA_INFO2,DATA_INFO3,RECV_TIME,SENDFLAG,WARNING_ID)
  values(HIBERNATE_SEQUENCE.NEXTVAL,INTERFACE_CODE,NODE,SUMMARY,DATA_TYPE,BUSSINESS_NOW,USER_NOW,COLLECT_TIME,DATA_INFO,DATA_INFO2,DATA_INFO3,RECV_TIME,SENDFLAG,WARNING_ID);
end P_BUSINESS;


 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值