Java 处理两个JDBC驱动程序的通用JDBC驱动程序

Java 处理两个JDBC驱动程序的通用JDBC驱动程序,java,jdbc,Java,Jdbc,我创建了一个JDBC驱动程序的实现,它反过来管理到两个DB的连接(例如,postgres和mysql)。对于所有的JDBC操作,这些连接都是基于特定的逻辑来维护的,并且满足了特定的请求。我的问题是 这是一个好方法吗?如果没有,谁能给点建议 内存管理将是此类实现的一个问题 1) 通常这类事情由DAO(数据访问对象,一个管理持久性的层)管理。将其设置为JDBC驱动程序只会迫使您遵守某些限制,从而使编写代码变得更加困难(我知道您的驱动程序将不具有很高的可重用性) 2) 这取决于你编码得有多好。如果没有

我创建了一个JDBC驱动程序的实现,它反过来管理到两个DB的连接(例如,postgres和mysql)。对于所有的JDBC操作,这些连接都是基于特定的逻辑来维护的,并且满足了特定的请求。我的问题是

  • 这是一个好方法吗?如果没有,谁能给点建议
  • 内存管理将是此类实现的一个问题
  • 1) 通常这类事情由DAO(数据访问对象,一个管理持久性的层)管理。将其设置为JDBC驱动程序只会迫使您遵守某些限制,从而使编写代码变得更加困难(我知道您的驱动程序将不具有很高的可重用性)

    2) 这取决于你编码得有多好。如果没有更多的细节,很难说,但是没有理由必须有内存管理问题。

    1)通常这种事情是由DAO(数据访问对象,一个管理持久性的层)管理的。将其设置为JDBC驱动程序只会迫使您遵守某些限制,从而使编写代码变得更加困难(我知道您的驱动程序将不具有很高的可重用性)


    2) 这取决于你编码得有多好。如果没有更多的细节,很难说,但是没有理由说你有内存管理问题。

    我认为这不是一个好方法

    基本问题是,不同的数据库后端之间存在差异,很难用统一的JDBC驱动程序“掩盖”这些差异。最明显的问题是,SQL的不同方言之间存在(显著)差异。。。包括支持的数据类型的差异。很难(不可能)隐藏这些差异,因为您的应用程序级代码正在使用通常使用的JDBCAPI

    有两种方法效果更好(IMO)

    • 典型的对象关系映射(如hibernate)将为处理差异的多个数据库后端提供适配器。他们通过以更抽象的方式表达查询,并在后台将查询转换为特定于数据库的SQL来实现这一点

    • 自己处理数据库特定的方面。。。在特定于应用程序的数据库适配器代码中。这需要构建自己的框架来生成或模板化查询,以处理方言差异。然后使用现有的特定于数据库的JDBC驱动程序,向它们传递正确类型的SQL



    FWIW-我不明白为什么内存管理是您提案中的一个特殊问题。

    我认为这不是一个好方法

    基本问题是,不同的数据库后端之间存在差异,很难用统一的JDBC驱动程序“掩盖”这些差异。最明显的问题是,SQL的不同方言之间存在(显著)差异。。。包括支持的数据类型的差异。很难(不可能)隐藏这些差异,因为您的应用程序级代码正在使用通常使用的JDBCAPI

    有两种方法效果更好(IMO)

    • 典型的对象关系映射(如hibernate)将为处理差异的多个数据库后端提供适配器。他们通过以更抽象的方式表达查询,并在后台将查询转换为特定于数据库的SQL来实现这一点

    • 自己处理数据库特定的方面。。。在特定于应用程序的数据库适配器代码中。这需要构建自己的框架来生成或模板化查询,以处理方言差异。然后使用现有的特定于数据库的JDBC驱动程序,向它们传递正确类型的SQL



    FWIW-我不明白为什么内存管理是您提案中的一个特殊问题。

    有时,当我运行多个查询时,会出现虚拟内存错误。我需要做一些内存检查吗?@在linux海洋的海岸上-那可能不是你的错。mysql jdbc驱动程序默认情况下将所有行读取到内存中(这是一种荒谬的默认行为)。我需要做一些内存检查吗?@在linux海洋的海岸上-那可能不是你的错。默认情况下,mysql jdbc驱动程序会将所有行读取到内存中(这是荒谬的默认行为)。谢谢。你知道有哪个网站用jdbc示例解释hibernate吗?我是一个C++在java中有很少到没有的EXP。在两种方法中,哪一种更容易实现?:-)你误解了。您使用Hibernate而不是JDBC。谢谢。你知道有哪个网站用jdbc示例解释hibernate吗?我是一个C++在java中有很少到没有的EXP。在两种方法中,哪一种更容易实现?:-)你误解了。您使用Hibernate而不是JDBC。