2012-12-28 144 views
0

目前我正在将数据库从Oracle迁移到MySQL。我主要使用Java将查询发送到使用JDBC的数据库。在迁移过程中,我需要在Java代码中更改很多查询(查询是硬编码的),因为它们在MySQL中不起作用。从Oracle迁移到MySQL

我希望能够重新编码我的查询,以便在出现问题时可以轻松地在数据库之间切换;我正在将所有查询改为标准SQL,但有些地方这是不可能的。我正在考虑有两个版本的查询,一个用于Oracle,另一个用于MySQL,所以我可以在两者之间切换(为了查看MySQL是否可以满足我们的需求,我将暂时使用两个版本)。然而,这似乎是一个可怕的想法 - 有没有人有更好的方法,他们会这样做的任何意见?

+0

您是否考虑过使用ORM解决方案? (休眠或类似) – favoretti

+0

@favoretti从来没有听说过一个ORM会考虑它感谢。 – JCS

回答

3

你有一堆选项。首先,很多人现在使用对象关系映射(ORM)工具将应用程序连接到SQL数据库。它们有各种不同的风格--Hibernate很受欢迎 - 并且允许您以极低的成本在数据库之间切换。但是,他们确实有一个相当陡峭的学习曲线。没有经验的开发人员通常会在ORM应用程序中遇到性能问题。

如果你坚持使用“传统”的JDBC,我建议你将SQL的主体从Java代码中拿出来,并把它看作是一种资源。正如Henry所建议的那样,您可以使用属性文件,并使用参数占位符(理想的命名占位符,使用Spring template)。虽然这确实将给定功能块的代码分散到两个文件中,但它可以很容易地快速优化SQL并测试新版本。

+0

我会尝试第二种解决方案,谢谢。 – JCS

0

一种可能性是将查询存储在属性文件中。你将有一个用于Oracle,一个用于MySql。

0

我必须添加 - ORM是一个很好的建议,并且可以工作......当您开始使用全新的应用程序时,您可以设计您的应用程序以在域模型上工作。

但是,在这种情况下,存在调用大量SQL查询的现有应用程序。基于ORM的查询(HQL,JPQL)转换为SQL就好了;然而,SQL并没有按照定义转换为ORM层,但是需要进行重大更改才能使其成为面向数据的更加面向对象的方法。

即使您设法在ORM层中工作,问题仍然会持续存在。 MySQL和Oracle之间在主键生成工作方式上已经有了很大的区别; MySQL在Oracle使用序列的地方使用自动编号。可能你已经有了一个现有的数据模型,你需要对ORM层代码进行反向工程;它不会是跨数据库代码。