如何在java中为不同的数据库创建多个数据库连接

我有一个应用程序,它使用不同地理位置的四个数据库。 所有数据库都包含相同的表,并且只有数据库名称根据位置而不同。 我必须在我的应用程序中创建一些使用每个数据库中的数据的报告。 从java应用程序创建这些数据库连接的正确方法是什么?是否有适合我可以使用的任务的设计模式?

由于您没有使用hibernateJPAORM任何一个标记您的问题,我假设您正在处理纯JDBC。

话虽如此,我建议你有一个DAO层来处理底层数据库,并将连接细节留给特定的实现。 您可以在一些.properties文件中配置连接字符串。

[补充]

您还可以使用DAO工厂,这是Abstract Factory或Factory Mathod模式的实现,适用于此处。

[链接]

  • BalusC 对DAO和DAO Factory的非常好的实现
  • 核心J2EE模式 – 可以说已过时但可能会提供一些想法。

有多种方法可以实现这一目标:

  1. 如果您使用任何支持分布式事务的Java EE容器,那么您可以使用那里的function。
  2. 如果使用普通JDBC,则必须为每个数据库维护自己的连接。 对于JDBC:
    1. 提供所有连接细节
    2. 有一个Facade通过调用抽象通用DAO为您提供所需的对象。
    3. 有一个基于连接创建dao的工厂。
  3. 使用像Hibernate这样的ORM工具,您可以在其中使用多个数据库的配置。 教程 。
  4. 如果您使用的是Spring,则可以为每个数据库配置一个数据源。 文件

设计模式:

  • Facade Pattern – 用于隐藏复杂性和多个数据库使用。
  • 工厂 – 如果您自己管理数据库连接。
  • Singleton – 用于数据源

实现这一目标的理想方法是使用像OLAP这样的多维系统。 但是看看你是否可以从这些数据库中创建一个视图。 然后你只需要查询视图(即只是一个数据库连接)。 如果需要,您仍然可以使用多个数据库连接。

您可以使用像Hibernate这样的ORM工具轻松处理多个连接。您可以在单独的配置文件中指定每个连接,并通过每次获取新的会话工厂来实例化所需的连接。

其他方法是使用数据源和JNDI: Java连接到多个数据库

我认为您可以将Factory模式和Singleton模式的组合用于此目的。

很容易:)

1.创建数据源以尝试连接到DB

 public DataSource getDataSource(String db) throws Exception { DataSource dt = null; InitialContext ic = null; try { if(db.trim().equals("you_database_name")) { dt = (DataSource)ic.lookup("jdbc/connection_name"); } else if(db.trim().equals("you_database_name")) { dt = (DataSource) ic.lookup("jdbc/connection_name"); } return dt; } catch(NamingException n) { throw new Exception("Err getDataSource (ServiceLocator) NamingException - " + n.getMessage()); } 

2.创建一个类DataBase,记住在这一点上关闭所有连接。

 public class DataBases { public YouNameDataSourceClass dataSrc; public DataBases() throws Exception { super(); dataSrc = new YouNameDataSourceClass.getDataSource(); } public Connection getConnectionAS400() throws Exception { return locator.getDataSource("you_database_name").getConnection(); } public Connection getConnectionOracle() throws Exception { return locator.getDataSource("you_database_name").getConnection(); } public Connection getConnectionSQLServer() throws Exception { return locator.getDataSource("you_database_name").getConnection(); } } 

好看。