我创建了一个JDBC驱动程序的实现,它反过来管理到两个DB(例如,postgres和mysql)的连接。对于所有的JDBC操作,这些连接都是基于特定的逻辑请求进行维护的。我的问题是处理两个JDBC驱动程序的通用JDBC驱动程序
- 这是一个很好的方法吗?如果没有人可以给一些指针
- 内存管理将是这样的实现问题?
我创建了一个JDBC驱动程序的实现,它反过来管理到两个DB(例如,postgres和mysql)的连接。对于所有的JDBC操作,这些连接都是基于特定的逻辑请求进行维护的。我的问题是处理两个JDBC驱动程序的通用JDBC驱动程序
1)通常这种事情是由DAO(数据访问对象,一个管理持久性的层)管理的。使它成为一个JDBC驱动程序只是迫使你遵循一些使代码更难编写的限制(我理解你的驱动程序不会很可重用)。
2)取决于你编码的程度。没有更多的细节,很难说,但没有理由为什么你必须有内存管理问题。
我不认为这是一个好方法。
最根本的问题是,不同的数据库后端具有难以用统一的JDBC驱动程序“翻录”的差异。最明显的问题是SQL的不同方言之间存在显着差异......包括支持的数据类型的差异。隐藏这些差异是很困难的(不可能),就是您的应用程序级代码使用的是正常使用的JDBC API。
有两种方法可以更好地工作(IMO)。
典型的对象关系映射(如hibernate)将为多个数据库后端提供处理差异的适配器。他们通过以更抽象的方式表达查询并在后台将查询转化为特定于数据库的SQL来实现这一点。
特定于您的应用程序的数据库适配器代码中处理数据库特定方面。这需要建立自己的框架来生成或模板化查询以处理方言差异。然后,您使用现有的数据库特定的JDBC驱动程序,将正确的SQL传递给它们。
FWIW - 我不明白为什么内存管理是你的建议特定的问题。
谢谢。你知道任何解释休眠jdbc例子的网站吗?我是一个C++开发人员,在java中几乎没有任何exp。两种方法哪一个容易实现? :-) –
你误会了。您使用Hibernate *而不是* JDBC。 –
有时,当我运行多个查询我得到虚拟内存错误。我需要做一些记忆检查吗? –
@on_the_shores_of_linux_sea - 这可能不是你的错。 mysql jdbc驱动程序默认读取所有行到内存中(这是荒谬的默认行为)。 – jtahlborn