最近在用DB2做开发时遇到一个问题,请教各位大大。我使用了SSI框架。
对一张表新增一条记录,其中包括了时间和日期的字符串(格式分别为:yyyymmdd|hhmmss)
原先用Ibatis写了一个动态语句。
配置文件如下:
<insert id="insertCompany" parameterClass="company">
<![CDATA[
INSERT INTO company (
comp_id,
comp_name,
comp_opbank_id,
comp_addr,
comp_phone,
                                     comp_reg_date,
                                    comp_reg_time,
comp_function_vers
]]>
<dynamic>
<isNotEmpty property="comp_re" prepend=",">
comp_re
</isNotEmpty>
</dynamic>
<![CDATA[
) VALUES (
#comp_id:VARCHAR#,
#comp_name:VARCHAR#,
#comp_opbank_id:VARCHAR#,
#comp_addr:VARCHAR#,
#comp_phone:VARCHAR#,
                                     replace(char(current date),'-',''),
                                    replace(char(current time),':',''),
#comp_function_vers:INTEGER#
]]>
<dynamic>
<isNotEmpty property="comp_re" prepend=",">
#comp_re:VARCHAR#
</isNotEmpty>
</dynamic>
<![CDATA[
)
]]>
</insert>
但在测试时,java始终报错,去掉其中的日期和时间,语句就能成功执行。于是我想用DB2的触发器来生成日期和时间,触发器语句如下:
CREATE TRIGGER
TRIGGER_COMPANY after
INSERT ON COMPANY REFERENCING NEW AS n 
  FOR EACH ROW MODE DB2SQL
UPDATE COMPANY
SET COMP_REG_DATE = replace(char(current date),'-',''),
COMP_REG_TIME = replace(char(current time),':','')
WHERE COMP_ID = n.comp_id;在命令行实验过,可行。但到了java程序执行插入操作时,又报错:很是不理解。希望高手能指点一下。看看是什么地方有问题。

解决方案 »

  1.   

    应该是你插入的时间有问题。
    你将时间保存到数据库就不要加“-”和“:”了。
    LZ可以通过Calendar或者Date获得日期,具体查API吧。
    我是新手,回答得不好。望高手能给出更好的解决方法!
      

  2.   

    也有可能是LZ页面获得的时间有问题。
    //创建日期类   
    Date dateNow=new Date();   
    SimpleDateFormat  dateFormat=new SimpleDateFormat ("yyyy 年 MM 月dd 日 HH 时 mm 分 ss 秒");   
    String dateNowStr=dateFormat.format(dateNow);  
      

  3.   

    我看DB2 也有TO_DATE方法
    应该是你的JAVA中时间类型 和数据库的格式不匹配
      

  4.   

    问题解决了。DB2中建表时不能使用current_date,current_time这些数据。这个时间和日期不能用JAVA中的,我只用DB2中的系统时间,所以不存在我赋值的格式问题。之后我想插入的时候日期和时间不填,使用触发器来完成。在DB2的命令行执行是成功的。但到了JAVA中,还是不行。这个问题一直没解决掉。但陷在的解决办法是,用sysdate来替换current_date和current_time:
    也不适用原先的replace函数和char函数,而用to_char(sysdate,'yyyy-mm-dd hh:mi:ss')函数。
    经过测试,成功执行。
      

  5.   

    CURRENT DATE 和 CURRENT TIME 不能直接在SQL 里面用?
    没用过DB2 真不知道·· 应该没这么搓吧