我的要求是通过Spring JDBCTemplate创建一个insert语句,我可以在其中传递在数据库中执行的oracle函数。
例如 - 假设我有一个具有列enter_time的表员工(数据类型为数字(20)),值将类似于20170106213124630560.此表的插入语句类似于 -
insert into employee (ID, enter_time ) values (1, to_number(to_char(sys_extract_utc(systimestamp),'YYYYMMDDHH24MISSFF')));
我必须从spring JDBCTemplate代码发送enter_time,如下所示 -
preparedStatement.setString(1,"to_number(to_char(sys_extract_utc(systimestamp),'YYYYMMDDHH24MISSFF'))");
但是当我使用setString()时,该值带有单引号,无法执行oracle函数。当我尝试
的时候 preparedStatement.setLong(1, to_number(to_char(sys_extract_utc(systimestamp),'YYYYMMDDHH24MISSFF')));
它在'YYYYMMDDHH24MISSFF'中给出了编译错误。
请帮助我如何编码,以便当spring创建一个insert语句时,它可以直接在数据库上运行。
请帮我找到解决方案。
答案 0 :(得分:1)
您不需要将其设置为参数,因为您无需设置任何内容。 systimestamp
是oracle内置的。试试这个:
String sql = "insert into TEST_UTC_TIMESTAMP (ID, UTC_TIMESTAMP) values (?, to_number(to_char(sys_extract_utc(systimestamp),'YYYYMMDDHH24MISSFF')))";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 2);
int n = ps.executeUpdate();