使用JDBC连接到不同数据库的模式

时间:2008-11-17 14:04:45

标签: java jdbc

我正在编写一个应用程序,它必须可以根据客户的需求进行配置以连接到Oracle,SQL Server和MySQL。

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

我被告知这不是很有效。

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

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

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

4 个答案:

答案 0 :(得分:7)

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

为要连接的每种类型的数据库创建一个具体的子类。所以你最终可能会得到MySQLDAO,MSSQLDAO和OracleDAO。每个都将加载相应的驱动程序并使用其各自的连接字符串。

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

所以例如(在伪代码中):

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

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

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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:2)

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

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

如果您正在进行大量插入操作,则可能需要调查预准备语句和批量更新,因为它们更有效。这可能最终变得不那么便携 - 没有测试就很难说。

答案 3 :(得分:1)

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

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

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

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

如果您正在使用Spring,但又不想使用JNDI,请查看DriverManagerDataSource以获取有关如何获取池数据源(DBCP或C3P0)的讨论。