我的需求是通过spring jdbctemplate创建一个insert语句,在这个语句中我可以传递在数据库中执行的oracle函数。
例如-假设我有一个表employee,它的enter_time列(数据类型是数字(20))和值类似于20170106213124630560。这个表的insert语句如下-

insert into employee (ID, enter_time ) values (1, to_number(to_char(sys_extract_utc(systimestamp),'YYYYMMDDHH24MISSFF')));

我必须像这样从spring jdbc模板代码发送输入时间-
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语句时,它可以直接在数据库上运行。
请帮我找到解决办法。

最佳答案

您不需要将其设置为参数,因为无需设置任何内容。systimestamp是Oracle内置的。试试这个:

String sql = "insert into TEST_UTC_TIMESTAMP (ID, UTC_TIMESTAMP) values (?, to_number(to_char(sys_extract_utc(systimestamp),'YYYYMMDDHH2‌​4MISSFF')))";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 2);
int n = ps.executeUpdate();

07-24 20:48