【问题标题】:pass string without single quote in spring jdbctemplate在spring jdbctemplate中传递不带单引号的字符串
【发布时间】:2017-01-07 22:38:16
【问题描述】:

我的要求是通过 Spring JDBCTemplate 创建一个插入语句,我可以在其中传递在数据库中执行的 oracle 函数。

例如 - 假设我有一个表员工,其列 enter_time(数据类型为 number(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 创建一个插入语句时,它可以直接在数据库上运行。

请帮助我找到解决方案。

【问题讨论】:

  • 我不确定这种事情是否可行。我可以考虑尝试的一件事是转义单引号,您是否尝试过"to_number(to_char(sys_extract_utc(systimestamp),\'YYYYMMDDHH24MISSFF\'))" 或者您可能需要 2 个 \'s 才能使其工作。 \\'YYYYMMDDHH24MISSFF\\'
  • 我不能把它作为一个字符串来做,因为当 spring 将它转换时,它会带有单引号。所以在这种情况下 'to_number(to_char(sys_extract_utc(systimestamp),'YYYYMMDDHH24MISSFF'))' 将被视为一个值并尝试插入该字符串。但我的要求是在插入之前执行该值并将其转换为 20170106213124630560。
  • sql 查询是 - 插入 TEST_UTC_TIMESTAMP (ID, UTC_TIMESTAMP) 值 (2, to_number(to_char(sys_extract_utc(systimestamp),'YYYYMMDDHH24MISSFF')));执行此查询后我们将插入的值是 2 和 20170107143056543257。第二个值是 oracle systime 最多 6 位。

标签: java database spring oracle


【解决方案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();

【讨论】:

  • 感谢古夫的帮助。如果我直接编写插入语句,它将起作用,但我必须遵循参数方法,因为它是现有代码的一部分。表也​​有超过 200 列,每列的值由运行时决定。所以我必须遵循参数方法。
  • 我不明白为什么需要参数化。如果你真的必须这样做,你可以在java代码中找到这个值并设置它。 systimestamp 是 oracle 数据库的一部分,而不是 java
  • 如果我在 java 中计算日期时间值。当记录输入数据库时​​,它永远不会给我正确的时间。如果是多线程环境,它也会误导。这就是为什么我想要它进入数据库的实际日期时间。
  • 这就是为什么我说不要参数化它。
  • 感谢古夫。你的建议对我有用.. 非常感谢。
猜你喜欢
  • 2022-10-24
  • 1970-01-01
  • 2019-11-20
  • 2014-06-14
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多