【发布时间】:2013-05-09 11:33:05
【问题描述】:
我正在尝试使用 JDBC Spring 框架在 Sql Server 2008 中插入一行:
代码如下:
BdClass bdclass= new BdClass(BdClass.BdConfig.ConnectionString_MYHOME);
Person personaNueva = new Person();
personaNueva.setIdPerson(5);
personaNueva.setUsuario("JavaUser");
personaNueva.setClave("JavaPassword");
personaNueva.setNombre("JavaNombreUsuario");
personaNueva.setActivo("S");
personaNueva.AddPerson(bdclass);
//Person class
public void AddPerson(BdClass bdclass)
{
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put(Constantes.idperson, this.getIdperson());
parameters.put(Constantes.usuario,this.getUsuario());
parameters.put(Constantes.clave,this.getClave());
parameters.put(Constantes.nombre,this.getNombre());
parameters.put(Constantes.activo, this.getActivo());
bdclass.Insert(parameters,Constantes.Table_Name);
}
//BdClass Insert
在此步骤中,我启用 IDENTITY INSERT
public void Insert(Map<String, Object> parameters, String TableName)
{
this.jdbcTemplate.execute("SET IDENTITY_INSERT " + TableName + " ON");
JdbcInsert = new SimpleJdbcInsert(this.jdbcTemplate).withTableName(TableName);
JdbcInsert.execute(parameters);
}
运行执行语句时出现以下异常:
原因:com.microsoft.sqlserver.jdbc.SQLServerException: 不能 在表'Persons'中为标识列插入显式值 IDENTITY_INSERT 设置为 OFF
我已经在 sql management studio 中尝试了 SET IDENTITY_INSERT PERSONS ON 命令,但没有成功。
编辑:idperson 字段是身份,但我是否传递参数和值都没有关系......我得到了同样的错误
编辑 2:
好的,我使用 usingColumns 属性修复了它,所以我可以指定每一列:
public void Insert(Map<String, Object> parameters, String TableName)
{
this.jdbcTemplate.execute("SET IDENTITY_INSERT " + TableName + " OFF");
JdbcInsert = new SimpleJdbcInsert(this.jdbcTemplate).withTableName(TableName)
.usingColumns(Person.Constantes.usuario,Person.Constantes.clave,
Person.Constantes.nombre,Person.Constantes.activo);
JdbcInsert.execute(parameters);
}
【问题讨论】:
标签: java sql spring sql-server-2008