2013-11-27 4 views
0

Я борюсь с кодом, использующим SimpleJdbcInsert Spring.SimpleJdbcInsert - Не вставлять данные в таблицы по схеме по умолчанию

SimpleJdbcInsert jdbcInsert = (new SimpleJdbcInsert(transactionManager.getDataSource()) 
       .withTableName(MY_TABLE).usingGeneratedKeyColumns("my_table_id")).usingColumns(MY_COLUMNS); 

Это прекрасно работает, когда я использую его на соединение, которое имеет схему по умолчанию, как «PUBLIC», а в том, где у меня нет каких-либо схем установить. Однако, когда я добавляю несколько схем, а затем делаю MY_SCHEMA1 в качестве схемы по умолчанию для подключения, это больше не работает. Он не находит таблицу MY_TABLE вообще.

Он начинает работать, если я добавляю .withSchemaName (MY_SCHEMA1) в SimpleJdbcInsert. Однако у меня нет такого варианта.

Пожалуйста, помогите.

Примечание: Я использую это для H2 и DB2.

+0

с помощью 'schema_name.table_name' instaed' MY_TABLE' Я предполагаю? – Kiwy

+0

Мне нужно найти имя schema_name во время выполнения. Я не могу закодировать их. – partha

ответ

0

Насколько я знаю, всякий раз, когда одна БД делится на несколько схем, вы должны конкретно указать схему, на которую указываете (независимо от значения по умолчанию). Я думаю, именно по этой причине он отлично работает, когда вы используете add .withSchemaName (MY_SCHEMA1). Однако, как вы уже упоминали, у вас нет этой опции, вы можете указать имя схемы где-то еще, например, в конфигурационных файлах сервера, файле свойств вашего приложения.

+0

, если вам нужно найти имя схемы во время выполнения, используйте ссылки БД. создайте ссылки БД с условиями if-else в вашей схеме по умолчанию на таблицы, которые вы хотите использовать соответственно. – Yasha

0

Динамически вызывающие методы, такие как withSchemaName() и useColumns() в произвольное время, являются основной претензией на полезность классов «построитель запросов», таких как SimpleJdbcInsert: почему вы используете его для константы?

Если вы настаиваете на окончательной переменной SimpleJdbcInsert, это может быть общий (написанный как в примере кода без схемы), и вы можете затем вызвать с ним имя_ShhemaName() после того, как вы узнаете, какую схему вы хотите для использования, чтобы получить полностью указанный SimpleJdbcInsert, который вы можете выполнить.

+0

Это была идея. Тем не менее, я не мог найти способ программно узнать схему по умолчанию для данного соединения. Я задал отдельный вопрос по http://stackoverflow.com/questions/20238520/how-to-get-the-default-schema-of-a-sql-connection – partha

Смежные вопросы