2012-12-28 4 views
0

Actuellement, je migre des bases de données d'Oracle vers MySQL. J'utilise principalement Java pour envoyer des requêtes à la base de données en utilisant JDBC. Dans le processus de migration, j'ai besoin de changer beaucoup de mes requêtes dans le code Java (les requêtes sont codées en dur) car elles ne fonctionneront pas dans MySQL. Je veux être capable de recoder mes requêtes de telle sorte que je puisse facilement basculer entre les bases de données si des problèmes surviennent; Je change toutes mes requêtes en SQL standard mais il y a des domaines où cela n'est pas possible. Je pense à avoir deux versions des requêtes, une pour Oracle et une pour MySQL afin que je puisse basculer entre les deux (j'aurai deux versions temporaires juste pour voir si MySQL peut faire face à nos besoins). Cependant, cela semble être une idée terrible - quelqu'un a-t-il des conseils sur une meilleure façon de le faire?Migration d'Oracle vers MySQL

+0

Avez-vous envisagé d'utiliser une solution ORM? (Hibernate ou similaire) – favoretti

+0

@favoretti jamais entendu parler d'un ORM se penchera sur lui merci. – JCS

Répondre

3

Vous avez un tas d'options. Premièrement, de nombreuses personnes utilisent maintenant des outils ORM (Object-Relational Mapping) pour connecter des applications à des bases de données SQL. Ceux-ci viennent dans une variété de saveurs différentes - Hibernate est populaire - et vous permettent de basculer entre les bases de données à très faible coût. Cependant, ils ont une courbe d'apprentissage assez raide. Les développeurs inexpérimentés rencontrent souvent des problèmes de performances dans les applications ORM. Si vous vous en tenez au JDBC "traditionnel", je vous suggère de retirer le corps du code SQL du code Java et de le traiter comme une ressource. Comme le suggère Henry, vous pouvez utiliser des fichiers de propriétés et utiliser des espaces réservés pour les paramètres (idéalement des espaces réservés nommés, en utilisant le Spring template). Bien que cela permette de répartir le code d'une fonctionnalité donnée en deux fichiers, il est facile d'affiner rapidement le SQL et de tester de nouvelles versions.

+0

Je vais essayer la deuxième solution, merci. – JCS

0

Une possibilité consiste à stocker les requêtes dans un fichier de propriétés. Vous en auriez un pour Oracle et un pour MySql.

0

Je dois ajouter - ORM est un bon conseil et fonctionnera ... lorsque vous démarrez avec une nouvelle application et que vous pouvez concevoir votre application pour travailler sur un modèle de domaine.

Dans ce cas, cependant, il existe une application qui appelle un grand nombre de requêtes SQL. Les requêtes basées sur ORM (HQL, JPQL) traduisent bien SQL; SQL ne se traduit pas par définition à la couche ORM mais des changements majeurs seront nécessaires pour en faire une approche plus orientée objet des données.

Le problème persistera même si vous réussissez à travailler dans une couche ORM. Il y a déjà une différence majeure entre MySQL et Oracle dans la façon dont la génération de clé primaire fonctionne par exemple; MySQL utilise la numérotation automatique où Oracle utilise une séquence. Vous avez probablement déjà un modèle de données existant que vous devez désassembler dans le code de couche ORM; Ce ne sera pas un code inter-base de données.