2008-11-17 70 views
7

我正在编写一个应用程序,该应用程序必须可根据客户端异想天开配置为连接到Oracle,SQL Server和MySQL。使用JDBC连接到不同数据库的模式

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

我被告知这不是非常有效。

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

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

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

回答

7

我建议你让它可配置并包含三个驱动程序。你可以使用这样的模式:创建一个超类(让我们称之为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语句适用于每个数据库)。

1

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

IMO为管理员提供了选择数据库,连接池和交易策略的最大灵活性。

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

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

如果您使用的是Spring,但不想使用JNDI,请参阅DriverManagerDataSource,以获取有关如何获取池化数据源(DBCP或C3P0)的讨论。

+0

您为数据源提供的链接提供了404! – 2014-07-09 12:51:04

2

如果您非常小心(并且测试过),那么您可以直接使用JDBC来完成此操作,只需更改驱动程序类和连接信息即可。你一定想远离JDBC-ODBC桥,因为它通常很慢且不可靠。这个桥梁在dbs上的表现与JDBC相比更有可能不同。

我认为如果您的要求与列出的一样简单,DAO路径是过度杀伤性的。

如果您正在进行大量插入操作,则可能需要调查预准备语句和批处理更新,因为它们效率更高。这可能会导致移植性下降 - 很难说没有测试。

相关问题