最近在用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程序执行插入操作时,又报错:很是不理解。希望高手能指点一下。看看是什么地方有问题。
对一张表新增一条记录,其中包括了时间和日期的字符串(格式分别为: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程序执行插入操作时,又报错:很是不理解。希望高手能指点一下。看看是什么地方有问题。
你将时间保存到数据库就不要加“-”和“:”了。
LZ可以通过Calendar或者Date获得日期,具体查API吧。
我是新手,回答得不好。望高手能给出更好的解决方法!
//创建日期类
Date dateNow=new Date();
SimpleDateFormat dateFormat=new SimpleDateFormat ("yyyy 年 MM 月dd 日 HH 时 mm 分 ss 秒");
String dateNowStr=dateFormat.format(dateNow);
应该是你的JAVA中时间类型 和数据库的格式不匹配
也不适用原先的replace函数和char函数,而用to_char(sysdate,'yyyy-mm-dd hh:mi:ss')函数。
经过测试,成功执行。
没用过DB2 真不知道·· 应该没这么搓吧