0

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

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

4

3 回答 3

3

你有很多选择。

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

如果您坚持使用“传统”JDBC,我建议您将 SQL 主体从 Java 代码中取出,并将其视为资源。正如亨利建议的那样,您可以使用属性文件,并使用参数占位符(理想情况下命名占位符,使用 Spring模板)。虽然这确实将给定功能的代码分散到两个文件中,但它可以很容易地快速改进 SQL 和测试新版本。

于 2012-12-28T10:32:14.237 回答
0

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

于 2012-12-28T10:20:33.793 回答
0

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

然而,在这种情况下,存在一个调用大量 SQL 查询的现有应用程序。基于 ORM 的查询(HQL、JPQL)可以很好地转换为 SQL;SQL 根据定义不会转换为 ORM 层,但是需要进行重大更改以使其成为更面向对象的数据处理方法。

即使您确实设法在 ORM 层中工作,问题仍然存在。例如,在主键生成方式上,MySQL 和 Oracle 之间已经存在重大差异;MySQL 使用自动编号,而 Oracle 使用序列。可能您已经有一个现有的数据模型,您需要对 ORM 层代码进行逆向工程;它不会是跨数据库代码。

于 2012-12-28T13:15:13.810 回答