Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring jdbctemplate中传递不带单引号的字符串_Java_Database_Spring_Oracle - Fatal编程技术网

Java 在spring jdbctemplate中传递不带单引号的字符串

Java 在spring jdbctemplate中传递不带单引号的字符串,java,database,spring,oracle,Java,Database,Spring,Oracle,我的要求是通过SpringJDBCTemplate创建一个insert语句,在该语句中,我可以传递在数据库中执行的oracle函数 e、 g-假设我有一个表employee,其列为enter_time(数据类型为number(20)),其值类似于20170106213124630560。此表的insert语句如下- insert into employee (ID, enter_time ) values (1, to_number(to_char(sys_extract_utc(systime

我的要求是通过SpringJDBCTemplate创建一个insert语句,在该语句中,我可以传递在数据库中执行的oracle函数

e、 g-假设我有一个表employee,其列为enter_time(数据类型为number(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')));
它在“yyyymmddhh24missf”处给出编译错误

请帮助我如何编写代码,以便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();

我不确定这种事情是否可能。我认为可以尝试的一件事是转义单引号,您是否尝试过
“to_number(to_char(sys_extract\u utc(systimestamp),\'yyyymmddhh24missf')”
,或者您可能需要2个才能使其工作<代码>\\'yyyymmddhh24missf\\'我不能将其作为字符串,因为当spring转换它时,它将使用单引号。因此,在本例中,“to_number(to_char(sys_extract_utc(systimestamp),'yyyymmddhh24missf')”将被视为一个值,并尝试插入该字符串。但我的要求是在插入之前执行该值并将其转换为20170106213124630560。sql查询是-插入到TEST_UTC_时间戳(ID,UTC_时间戳)值(2,to_number(to_char(sys_extract_UTC(systimestamp),'yyyymmddhh24missf');执行此查询后,我们将插入的值为2和20170107143054543257。第二个值是oracle systime,最高为6位。感谢您的帮助。如果我直接编写insert语句,它将起作用,但我必须遵循参数方法,因为它是现有代码的一部分。表中还有200多列,每列的值在运行时决定。所以我必须遵循参数化的方法,我不明白为什么这需要参数化。如果确实需要,可以在java代码中找到该值并进行设置。如果我用java计算日期时间值,systimestamp是oracle数据库的一部分,而不是java。当记录被输入数据库时,它永远不会给我正确的时间。在多线程环境的情况下,它也会误导用户。这就是为什么我想要它进入数据库的实际日期时间。这就是为什么我说不要参数化它。谢谢。你的建议对我有用。。谢谢。