Cela pourrait fonctionner pour vous, bien sûr. Je serai cependant un peu plus complet pour les futurs lecteurs de la question:
mais beaucoup de requêtes que vous écrivez peuvent être spécifiques à une base de données, ou s'appuyer sur certains mots-clés pour être efficaces. Prenons par exemple une requête commune. Vous voulez la liste de tous les produits dans une base de données, mais montrer à l'utilisateur 10 à un moment:
MySQL:
select * from products LIMIT 0,10
puis pour les 10 lignes suivantes:
select * from products LIMIT 10,10
etc.
Fantastique, les utilisateurs peuvent utiliser MySQL pour la base de données. Eh bien, que se passe-t-il s'ils utilisent postgres, une autre base de données gratuite et très populaire? Cette requête ne va pas fonctionner:
SELECT * FROM product LIMIT 10 OFFSET 10
Votre code n'est donc pas aussi portable que vous le pensez. Une façon de contourner ce problème est de créer vos propres interfaces (interface Query, interface Access) pour toutes les requêtes/accès que vous envisagez de faire, et d'avoir une fabrique de requêtes qui peut instancier, en fonction du dialecte DB. (MySQL, postgres, etc) et créer MySQLQueryImpl et PostGresQueryImpl (les deux implémentant l'interface de requête).
Vous devez malheureusement coder certains des appels de base de données, ou les déplacer dans un fichier de propriétés. Vous pouvez également concevoir le facteur de requête à instancier à partir d'un fichier de propriétés (comme vous le souhaitez) et autoriser les autres utilisateurs à implémenter leur propre requête afin que l'extensibilité soit présente et que vous n'ayez pas à tout faire vous-même.
Ou ...
L'autre option, ce qui est probablement plus élégante et la preuve d'erreur (bien ... peut-être) est de laisser quelqu'un d'autre le faire pour vous. Hibernate est un outil très commun qui résume la base de données en lecture/écriture pour vous, et peut être configuré pour utiliser une base de données différente comme vous le souhaitez, seulement il a des années d'expérience et des corrections de bugs. Ce n'est pas la chose la plus facile à apprendre (pour les requêtes complexes et les jointures, etc.) mais pour les modèles de base et le mappage vers une base de données, cela vous donnera tout ce que vous voulez et plus encore. chargement de données afin de ne pas apporter des milliers d'enregistrements que vous n'utiliserez pas.Il vous faudrait beaucoup de temps pour créer et durcir un système comme celui-ci.
En théorie, c'est bien, mais selon mon expérience (1) Vous ne changez vraiment pas de bases de données sauf dans des circonstances extrêmement rares; (2) C'est la syntaxe SQL qui rendra difficile, pas le pilote. – JohnFx
@JohnFx ok, merci, mais si ne faites pas attention à la différence entre la syntaxe sql, donc cette idée est bonne? Ou peut-être exister un moyen plus élégant pour atteindre cet objectif? – MyTitle
Peut être le déplacer vers datasource? – kosa