Я пытаюсь загрузить таблицу, в которой есть столбец идентификаторов, с модулем БД.Я хочу иметь возможность установить значение идентификатора самостоятельно (я не хочу, чтобы база данных генерировала его для меня).
Вот минимальное определение моей таблицы
create table X (
id numeric(10,0) IDENTITY PRIMARY KEY NOT NULL
)
Чтобы вставить строку в X, я выполняю следующий SQL
set INDENTITY_INSERT X ON
insert into X(id) VALUES(666)
Нет проблем.Но когда я пытаюсь загрузить эту таблицу со следующим набором XML-данных следующего блока дБ (RS_7_10_minimal_ini.xml)
<dataset>
<X id="666"/>
</dataset>
с использованием следующего минимального теста JUnit (DBTestCase):
package lms.lp.functionnal_config;
import java.io.FileInputStream;
import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import lms.DBUnitConfig;
import org.junit.Test;
public class SampleTest extends DBTestCase
{
public SampleTest(String name)
{
super( name );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, DBUnitConfig.DBUNIT_DRIVER_CLASS );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, DBUnitConfig.DBUNIT_CONNECTION_URL );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, DBUnitConfig.DBUNIT_USERNAME );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, DBUnitConfig.DBUNIT_PASSWORD );
}
protected IDataSet getDataSet() throws Exception
{
return new FlatXmlDataSetBuilder().build(new FileInputStream("src/test/resources/RS_7_10_minimal_ini.xml"));
}
@Test
public void testXXX() {
// ...
}
}
Itпроисходит сбой со следующим исключением
com.sybase.jdbc3.jdbc.SybSQLException: Explicit value specified for identity field in table 'X' when 'SET IDENTITY_INSERT' is OFF.
Кажется, модуль БД не включает идентификацию перед включением строки, для которой указано значение столбца идентификации.
Я уже пытался выполнить себяна соединении, полученном из JdbcDataBaseTester, но не повезло.Возможно, новое соединение или не то же соединение, которое использовалось для передачи данных в базу данных.
Есть идеи?
Большое спасибо за вашу помощь всем!
Октава