我正在编写一个应用程序,该应用程序必须可根据客户端异想天开配置为连接到Oracle,SQL Server和MySQL。使用JDBC连接到不同数据库的模式
到目前为止,我一直在计划使用JDBC-ODBC桥接,并且只是使用不同的连接字符串连接到数据库。
我被告知这不是非常有效。
是否有连接到多个数据库系统的模式或最佳实践?或者选择使用哪个驱动程序?
我应该配置它吗?但包括所有三个驱动程序或建立三个独立的客户?
我没有做任何复杂的事情,只是从事件流中抽取(插入)数据到数据库中。
我正在编写一个应用程序,该应用程序必须可根据客户端异想天开配置为连接到Oracle,SQL Server和MySQL。使用JDBC连接到不同数据库的模式
到目前为止,我一直在计划使用JDBC-ODBC桥接,并且只是使用不同的连接字符串连接到数据库。
我被告知这不是非常有效。
是否有连接到多个数据库系统的模式或最佳实践?或者选择使用哪个驱动程序?
我应该配置它吗?但包括所有三个驱动程序或建立三个独立的客户?
我没有做任何复杂的事情,只是从事件流中抽取(插入)数据到数据库中。
我建议你让它可配置并包含三个驱动程序。你可以使用这样的模式:创建一个超类(让我们称之为DAO),它提供了连接到数据库的功能。这可能是抽象的。
为每个想要连接的数据库类型创建一个具体子类。所以你最终可能会得到MySQLDAO,MSSQLDAO和OracleDAO。每个人将加载相应的驱动程序并使用其各自的连接字符串。
用方法getDAO(DB)创建另一个类(让它称为DAOFactory),该方法将根据DB的值创建DAO的实例。
因此,例如(在伪代码):
if(DB.equals("MySQL")){
DAO = new MySQLDAO();
}
return DAO;
所以需要连接到数据库将调用DAOFactory并要求DAO实例的任何代码。您可以将DB值存储在外部文件(如属性文件)中,以便您不必修改代码即可更改数据库类型。
这样你的代码就不需要知道它连接的数据库类型,如果你以后决定支持第四种类型的数据库,你将不得不增加一个类并修改DAOFactory,而不是其他的类型的代码。
如果您需要任何复杂的东西,Hibernate是一个不错的选择。否则,我会做的是将你的连接细节存储在一个属性文件(或其他形式的配置) - 即:驱动程序类名,JDBC URL,用户名和密码。
然后,您只需从属性文件中加载连接详细信息,并在您的类路径中包含正确的JAR文件即可。
如果您希望它更容易配置,但您可以使用像Commons-DBCP这样的库,但除此之外它只是您需要执行的操作(当然,前提是您的SQL语句适用于每个数据库)。
看看Datasource。这是获得数据库连接的首选机制。
IMO为管理员提供了选择数据库,连接池和交易策略的最大灵活性。
如果您使用的是tomcat,那么请参阅了解如何使用tomcat的JNDI注册数据源。
如果您使用Spring,那么您可以使用jee:jndi-lookup
获取数据源。
如果您使用的是Spring,但不想使用JNDI,请参阅DriverManagerDataSource,以获取有关如何获取池化数据源(DBCP或C3P0)的讨论。
如果您非常小心(并且测试过),那么您可以直接使用JDBC来完成此操作,只需更改驱动程序类和连接信息即可。你一定想远离JDBC-ODBC桥,因为它通常很慢且不可靠。这个桥梁在dbs上的表现与JDBC相比更有可能不同。
我认为如果您的要求与列出的一样简单,DAO路径是过度杀伤性的。
如果您正在进行大量插入操作,则可能需要调查预准备语句和批处理更新,因为它们效率更高。这可能会导致移植性下降 - 很难说没有测试。
您为数据源提供的链接提供了404! – 2014-07-09 12:51:04