业务场景是这样的,我们在与一个Delphi开发的现有系统做数据交换,数据库是Oracle 10g,Java服务端收到的都是一些已经由Delphi组装好的Insert语句,服务端这边调用Statement去执行这些语句的时候遇到一个日期格式的问题。例如这一句:
INSERT INTO BUSI_LOG(KEYNO,USER,OP,OP_DATE) VALUES('88/100202/00000','88','do something','2006-12-29')
在Delphi上用ADO写入Oracle是正常的。同样这句,放在Statement.executeUpdate中则出现"ORA-01861: 文字与格式字符串不匹配"的错误信息。我在测试时把语句中的日期格式改成下面这样就一切正常:
INSERT INTO BUSI_LOG(KEYNO,USER,OP,OP_DATE) VALUES('88/100202/00000','88','do something','29-DEC-2006')-_-# 无比郁闷中,由于是数据交换系统,所以我们不可能对SQL进行拆分→转化→重组的笨方法。不知道有什么办法能够让Statement能够识别"YYYY-MM-DD"这样格式的日期?Oracle JDBC驱动是10.2.0.2用过了,10.1.0.2也用过了,…………

解决方案 »

  1.   

    数据库是datetime类型吗? 建议用PreparedStatement 然后setTimestamp方法
      

  2.   

    to_date('你的时间','YYYY-MM-DD HH24:MI:SS')
      

  3.   

    是datetime类型。
    setTimestamp没法用上,因为SQL语句已经由现有程序拼装好,没有parameter,所以setTimestamp函数所需的parameterIndex这个参数,我没法弄出来
      

  4.   

    用delphi写个dll,然后用jni去调用,这样铁定行,就是绕点弯
      

  5.   

    干脆写一个日期事件格式化函数,为了减少开发工作的量,可以用java.text包中的DateFormat进行快速开发