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模式下