SimpleJdbcInsert - 不在默认模式的表中插入数据

Posted

技术标签:

【中文标题】SimpleJdbcInsert - 不在默认模式的表中插入数据【英文标题】:SimpleJdbcInsert - Not inserting data in tables in default schema 【发布时间】:2013-11-27 09:37:54 【问题描述】:

我正在为使用 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 上使用它。

【问题讨论】:

使用schema_name.table_name 代替MY_TABLE 我猜? 我需要在运行时找到 schema_name。我不能把它们编码进去。 【参考方案1】:

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

【讨论】:

如果您必须在运行时查找模式名称,请使用 DB 链接。在您的默认架构中创建带有 if-else 条件的数据库链接到您要相应使用的表。【参考方案2】:

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

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

【讨论】:

就是这个想法。但是,我想不出一种以编程方式找出给定连接的默认模式的方法。我在***.com/questions/20238520/… 上提出了一个单独的问题

以上是关于SimpleJdbcInsert - 不在默认模式的表中插入数据的主要内容,如果未能解决你的问题,请参考以下文章

SimpleJdbcInsert由于自动生成的ID(HSQLDB)为空而无法插入

如何使用 SimpleJdbcInsert 和 executeBatch 和 MYSQL JDBC 驱动程序获取生成的密钥?

spring3: 对JDBC的支持 之 Spring提供的其它帮助 SimpleJdbcInsert/SimpleJdbcCall/SqlUpdate/JdbcTemplate 生成主键/批量处理(

运行Create-React-App测试不在Watch模式下

PythonXY,IPython Qt 控制台,matplotlib,绘制不在内联模式下的东西

DOZE模式是系统默认开启的吗