【问题标题】:Pattern for connecting to different databases using JDBC使用 JDBC 连接到不同数据库的模式
【发布时间】:2010-09-22 16:15:16
【问题描述】:

我正在编写一个应用程序,该应用程序必须可配置为连接到 Oracle、SQL Server 和 MySQL,具体取决于客户端的突发奇想。

到目前为止,我一直在计划使用 JDBC-ODBC 桥,并使用不同的连接字符串连接到数据库。

我听说这不是很有效。

  1. 是否有连接到多个数据库系统的模式或最佳实践?或者选择使用哪个驱动程序?

  2. 我应该配置它吗?但包括所有三个驱动程序或构建三个单独的客户端?

我没有做任何复杂的事情,只是将数据从事件流中泵入(插入)到数据库中。

【问题讨论】:

    标签: java jdbc


    【解决方案1】:

    我建议您将其设置为可配置并包含三个驱动程序。您可以使用这样的模式:创建一个提供连接到数据库的功能的超类(我们称之为 DAO)。这可能是抽象的。

    为您希望连接的每种类型的数据库创建一个具体的子类。因此,您最终可能会使用 MySQLDAO、MSSQLDAO 和 OracleDAO。每个都将加载各自的驱动程序并使用其各自的连接字符串。

    使用 getDAO(DB) 方法创建另一个类(我们称之为 DAOFactory),该方法将根据 DB 的值创建 DAO 的实例。

    例如(在伪代码中):

     if(DB.equals("MySQL")){
        DAO = new MySQLDAO();
    }
    return DAO;
    

    所以任何需要连接到数据库的代码都会调用 DAOFactory 并请求一个 DAO 实例。您可以将 DB 值存储在外部文件(如属性文件)中,这样您就不必修改代码来更改数据库类型。

    这样你的代码不需要知道它连接到哪种类型的数据库,如果你决定以后支持第四种类型的数据库,你将不得不再添加一个类并修改 DAOFactory,而不是其余的你的代码。

    【讨论】:

      【解决方案2】:

      如果您需要任何复杂的东西,Hibernate 是一个不错的选择。

      否则,我会将您的连接详细信息存储在属性文件(或其他形式的配置)中 - 即:驱动程序类名、JDBC url、用户名和密码。

      然后,您需要做的就是从您的属性文件中加载连接详细信息,并在您的类路径中包含正确的 JAR 文件,然后您就完成了。

      如果您希望配置更容易一些,您可以使用 Commons-DBCP 之类的库,但除此之外,您只需要这样做(当然,前提是您的 SQL 语句适用于每个数据库)。

      【讨论】:

        【解决方案3】:

        如果您小心(并且您进行了测试),您可以使用直接的 JDBC 来执行此操作,只需更改驱动程序类和连接信息即可。您肯定希望远离 JDBC-ODBC 桥,因为它通常很慢且不可靠。与 JDBC 相比,桥跨 dbs 的行为更有可能不同。

        如果您的要求像列出的那样简单,我认为 DAO 路径是多余的。

        如果您要执行大量插入操作,您可能需要调查准备好的语句和批量更新,因为它们的效率要高得多。这可能最终会变得不那么便携——如果没有测试就很难说。

        【讨论】:

          【解决方案4】:

          看看Datasource。这是获取数据库连接的首选机制。

          IMO 这为管理员选择数据库、连接池和事务策略提供了最大的灵活性。

          如果您使用的是 tomcat,请参阅here 了解如何使用 tomcat 的 JNDI 注册数据源。

          如果您使用的是 Spring,那么您可以使用 jee:jndi-lookup 获取数据源。

          如果您使用 Spring,但不想使用 JNDI,请查看 DriverManagerDataSource,了解如何获取池化数据源(DBCP 或 C3P0)。

          【讨论】:

          • 您为数据源提供的链接是404!
          • 修复了链接。谢谢帕雷什。
          猜你喜欢
          • 2016-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-29
          • 2014-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多