目前我正在将数据库从Oracle迁移到MySQL。我主要使用Java使用JDBC向数据库发送查询。在迁移过程中,我需要在Java代码中更改我的大量查询(查询是硬编码的),因为它们在MySQL中不起作用。
我希望能够以这样的方式重新编码我的查询:如果出现问题,我可以轻松地在数据库之间切换;我正在将所有查询更改为标准SQL,但有些地方无法实现。我想有两个版本的查询,一个用于Oracle,一个用于MySQL,所以我可以在两者之间切换(我将暂时只有两个版本,看看MySQL是否可以满足我们的需求)。然而,这似乎是一个可怕的想法 - 任何人都有更好的方法可以做到这一点吗?
答案 0 :(得分:3)
你有很多选择。
首先,许多人现在使用对象关系映射(ORM)工具将应用程序连接到SQL数据库。它们有各种不同的风格 - Hibernate很受欢迎 - 并允许您以极低的成本在数据库之间切换。然而,他们确实有一个相当陡峭的学习曲线。缺乏经验的开发人员经常在ORM应用程序中遇到性能问题。
如果您坚持使用“传统”JDBC,我建议您从Java代码中获取SQL的主体,并将其视为资源。正如Henry建议的那样,您可以使用属性文件,并使用参数占位符(理想情况下使用Spring template命名占位符)。虽然这确实将给定功能的代码分散到两个文件中,但它可以很容易地快速优化SQL并测试新版本。
答案 1 :(得分:0)
一种可能性是将查询存储在属性文件中。你有一个用于Oracle,一个用于MySql。
答案 2 :(得分:0)
我必须添加 - ORM是一个很好的建议并且可以工作......当你开始使用一个全新的应用程序时,你可以设计你的应用程序来处理域模型。
但是在这种情况下,现有的应用程序会调用大量的SQL查询。基于ORM的查询(HQL,JPQL)转换为SQL就好了;根据定义,SQL不会转换为ORM层,但是,需要进行重大更改才能使其成为一种面向对象的数据方法。
即使您设法在ORM层中工作,问题仍将存在。例如,在主键生成工作方式上,MySQL和Oracle之间已经存在重大差异; MySQL使用自动编号,Oracle使用序列。您可能已经拥有了一个现有的数据模型,您需要将其反向工程到ORM层代码中;它不会是跨数据库代码。