java - 如何在运行时创建多个模式连接?

标签 java oracle jdbc ibatis jdbc-odbc

我有一个项目名称下拉列表,并根据所选值生成架构下拉列表。

生成架构列表后,有一个“选择文件”选项,可以选择要在多个架构上运行的脚本名称。

项目列表值和架构列表值都存储在数据库中。数据库中还有另一个表,用于存储架构凭据。

我想知道如何在这些多个架构上创建连接,以及如何在从该架构下拉列表中选择的多个架构中运行脚本。

我已经使用 iBatis 框架使用 scriptrunner 方法在一个模式中执行了代码。

表 1:项目名称

PROJECT_PK,
PROJECT_CODE,
PROJECT_NAME

表2:组件名称

COMPONENT_PK,
COMPONENT_CODE,
COMPONENT_NAME,
PROJECT_PK

表 3:SchemaName(此表包含其他架构的凭据)

SCHEMA_PK,
SCHEMA_NAME,
PASSWORD,
ORACLE_SID,
HOST_NAME,
PORT_ID

表 4:PROJECT_DETAIL

PROJECT_DETAIL_PK,
COMPONENT_PK,
SCHEMA_PK

表5:COMPONENT_DETAILS

COMPONENT_DETAILS_PK,
PROJECT_PK,
SCHEMA_PK

我正在附上场景图像。

enter image description here

最佳答案

我建议您创建一个“ super 模式”,并为每个其他模式提供适当的授权,并为此“ super 模式”创建 JDBC 连接。这将使您需要对 sql 脚本进行一些篡改 - 您需要使用一些标记来编写它以轻松替换模式,例如

ALTER TABLE ${SCHEMA_MARKER}.INVOICES ADD CLIENT_ADRRESS Varchar2(35);

您的 Java 代码会将其替换为您所针对的架构。凭借一些想象力,您可以扩展此想法以在所有架构上执行批量 DDL 脚本。

顺便说一句,根据您的问题,我了解到您有许多具有相同结构的模式。我曾经被迫与这样的遗留结构一起工作,所以我知道公司结构有很大的动力;尽管如此,我必须建议您重新设计这样的系统。例如,考虑在 super 模式上创建物化 View ,复制模式结构,但在每个表主键中使用一个新字段(这个新字段将填补使任何人在许多模式中分隔数据的空白)。

这肯定会让您的查询缓存受到的影响少得多,并且将使需要使用“分布式”数据的任何新软件的开发变得更加容易。

关于java - 如何在运行时创建多个模式连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21108656/

相关文章:

java - 对在 Spring MVC 中使用 ContextLoaderListener 感到困惑

java - Oracle 19c 与 jdk7 的兼容性

java - 无法将值 '2012-04-05 10:20:00' 从列 XX 转换为 TIMESTAMP

java - JDBC 连接挂起,没有来自 SQL Server 2008 r2 的响应

java - 为 Servlet 设置 SimpleJdbcTemplate

java - 原始变量和引用变量的内存分配

java - 从数据库中检索数据时 (PreparedStatement prest) 的问题

java - 如何在 JGraphx 中制作平行四边形顶点?

java - 在 Oracle 中将 DB 数据与 Java 字符串进行比较是否安全?

sql - 包声明的内容