目前,我正在将数据库从Oracle迁移到MySQL。我主要使用Java通过JDBC向数据库发送查询。在迁移过程中,我需要在Java代码中更改很多查询(查询是硬编码的),因为它们在MySQL中不起作用。
我希望能够重新编码我的查询,如果出现问题,我可以很容易地在数据库之间切换;我正在将我的所有查询更改为标准SQL,但在某些方面这是不可能的。我正在考虑有两个版本的查询,一个用于Oracle,另一个用于MySQL,这样我就可以在这两个版本之间切换(我暂时会有两个版本,看看MySQL是否能满足我们的需求)。然而,这似乎是一个糟糕的想法--有没有人有什么更好的建议呢?
发布于 2012-12-28 18:32:14
你有很多选择。
首先,许多人现在使用对象关系映射(ORM)工具将应用程序连接到SQL数据库。它们有各种不同的风格- Hibernate很流行-并允许您以很低的成本在数据库之间切换。然而,他们确实有一个相当陡峭的学习曲线。没有经验的开发人员经常在ORM应用程序中与性能问题作斗争。
如果您坚持使用“传统的”JDBC,我建议您将SQL的主体从Java代码中去掉,并将其视为一种资源。正如Henry所建议的,您可以使用属性文件,并使用参数占位符(理想情况下,使用Spring template命名占位符)。虽然这确实将给定功能的代码分散到两个文件中,但它使得快速改进SQL和测试新版本变得很容易。
发布于 2012-12-28 18:20:34
一种可能性是将查询存储在属性文件中。一个用于Oracle,一个用于MySql。
发布于 2012-12-28 21:15:14
我必须补充- ORM是一个很好的建议,并且会起作用……当您开始使用新的应用程序时,您可以设计您的应用程序以在域模型上工作。
但是,在本例中,存在一个调用大量SQL查询的现有应用程序。基于ORM的查询(HQL,JPQL)可以很好地转换为SQL;但是,根据定义,SQL不会转换为ORM层,但需要进行重大更改,以使其成为一种更面向对象的数据方法。
即使您设法在ORM层中工作,这个问题仍然存在。例如,在主键生成的工作方式上,MySQL和Oracle之间已经有了很大的不同;MySQL在Oracle使用序列的地方使用自动编号。您可能已经有了一个现有的数据模型,需要将其反向工程到ORM层代码中;它不会是跨数据库的代码。
https://stackoverflow.com/questions/14067845
复制相似问题