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
语句。