SimpleJdbcInsert - 不在默认架构中的表中插入数据

时间:2013-11-27 09:37:55

标签: java spring db2 h2 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上使用它。

2 个答案:

答案 0 :(得分:0)

据我所知,每当将一个数据库划分为多个模式时,您必须专门指定您指向的模式(与默认模式无关)。我认为,这就是使用add .withSchemaName(MY_SCHEMA1)时它正常工作的原因。 但是,正如您所提到的,您没有此选项,您可以在其他地方指定架构名称,例如服务器配置文件,应用程序的属性文件。

答案 1 :(得分:0)

在任意时间动态调用withSchemaName()和useColumns()等方法是对“查询构建器”类(如SimpleJdbcInsert)有用的主要要求:为什么要将它用于常量?

如果你坚持使用最终的SimpleJdbcInsert变量,它可以是通用变量(在代码示例中编写,没有模式),然后在找到想要的模式后,可以在其上调用withSchemaName()。使用,获取一个完全指定的SimpleJdbcInsert,你可以执行。