Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 将序列生成器指定为值_Java_Spring_Sequence_Spring Jdbc_Jdbctemplate - Fatal编程技术网

Java 将序列生成器指定为值

Java 将序列生成器指定为值,java,spring,sequence,spring-jdbc,jdbctemplate,Java,Spring,Sequence,Spring Jdbc,Jdbctemplate,是否可以将序列生成器指定为SimpleJdbcInsert、JdbcTemplate、NamedParameterJdbcTemplate或任何其他批执行类中的列的值 e、 例如,我想实现由上述任何类生成的SQL,如下所示: 插入某些_表_名称(ID,列_A,…)值(SOME_SEQUENCE.NEXTVAL,'列A的值',…); 示例代码段如下所示: import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils

是否可以将序列生成器指定为
SimpleJdbcInsert
JdbcTemplate
NamedParameterJdbcTemplate
或任何其他批执行类中的列的值

e、 例如,我想实现由上述任何类生成的SQL,如下所示:

插入某些_表_名称(ID,列_A,…)值(SOME_SEQUENCE.NEXTVAL,'列A的值',…);
示例代码段如下所示:

import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
导入org.springframework.jdbc.core.simple.SimpleJdbcInsert;
实体列表;//从方法参数接收
SimpleJdbcInsert sql=新的SimpleJdbcInsert(数据源);
SqlParameterSource[]batch=SqlParameterSourceUtils.createBatch(listOfEntities.toArray());
sql.executeBatch(批处理);
我试图将
SimpleJdbcInsert
欺骗为:

SqlParameterSource id=new-MapSqlParameterSource(“id”,“SOME_SEQUENCE.nextval”);
SqlParameterSource[]batch=SqlParameterSourceUtils.createBatch(listOfEntities.toArray());
List params=new ArrayList(batch.length+1);
参数添加(id);
用于(SqlParameterSource参数:批处理)
{
参数添加(参数);
}
executeBatch(params.toArray(新的SqlParameterSource[]{}));
但这并不奇怪,因为
ID
列是numeric类型,它试图将值填充为
“SOME_SEQUENCE.nextval”
,而不是评估
SOME_SEQUENCE.nextval
的结果


PS:表中的列太多,因此我不想使用预先准备好的语句

String sql=“插入用户”
(用户名、帐号、姓氏、姓氏、电子邮件)
价值观
(user.nextval、、、、、)”;
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,账号);
ps.setString(2,名字);
ps.setString(3,姓氏);
ps.setString(4,电子邮件);

你的意思是要另一个表的序列号吗?@MehrdadHosseinNejad:不。我已经/将创建一个序列,用于填充
ID
列的值。我认为这是不可能的。目前,我们在主
insert
之前运行一个查询,以检索相关序列中的下一个id,然后将该值添加到查询中。@mohammedkhan:但在这种情况下,您将无法利用。@MohammadFaisal如果您插入数据库的详细信息来自POJO,您可以从对对象进行排序,然后运行批处理更新。如果不是这样,那么不,不可能批量运行它。您必须分别运行每个
INSERT
语句。