在spring jdbctemplate中传递没有单引号的字符串

时间:2017-01-07 14:10:55

标签: java database spring oracle

我的要求是通过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语句时,它可以直接在数据库上运行。

请帮我找到解决方案。

1 个答案:

答案 0 :(得分:1)

您不需要将其设置为参数,因为您无需设置任何内容。 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();