Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

code SQL compatible

7 réponses
Avatar
Pif
Bonjour, je fais un programme java, j'aimerais rendre ce programme
compatible avec les principaux outils SQL du marché (MySQL, Posgres,
Oracle, etc.).

J'aimerais savoir s'il existe des librairies ou si vous avez des
conseils pour faire en sorte que mon code JDBC soit portable.

Je me restreint au java.sql.* de bases dans mes objets, le peux changer
le pilote JDBC, mais le problème vient ensuite de mes requetes SQL, qui
ont parfois besoin d'etre traduites...

Avez vous des solutions à me proposer ?

merci !

7 réponses

Avatar
Trognon Patrice
Pif wrote:

Bonjour, je fais un programme java, j'aimerais rendre ce programme
compatible avec les principaux outils SQL du marché (MySQL, Posgres,
Oracle, etc.).

J'aimerais savoir s'il existe des librairies ou si vous avez des
conseils pour faire en sorte que mon code JDBC soit portable.

Je me restreint au java.sql.* de bases dans mes objets, le peux changer
le pilote JDBC, mais le problème vient ensuite de mes requetes SQL, qui
ont parfois besoin d'etre traduites...

Avez vous des solutions à me proposer ?

merci !


Tant que tu restes SQL-92 pas de soucis cela sera compatible.
Si jamais tu dois utiliser des syntaxes SQL proprio, isole les
dans des sous classes qui vont se spécialiser sur le SGBDR
ciblé.

--
Cordialement,

Patrice Trognon
http://www.javadevel.com

Avatar
Pif
tu connais un site qui référence les limites exactes du SQL 92 et
éventuellement pour le reste propose des traductions d'un SGBD à un autre ?

d'autre part, si pour un select ou insert peu de problemes se posent,
qu'en est il d'un create ?
Les types et le autoincrement par exemple ne sont pas tous gérés pareil ?
J'ai l'habiture du MySQL ... je crois me souvenir que l'auto increment
passe par des mécanismes compliqués oracle ?

merci !
Avatar
Trognon Patrice
Pif wrote:


tu connais un site qui référence les limites exactes du SQL 92 et
éventuellement pour le reste propose des traductions d'un SGBD à un autre
?

d'autre part, si pour un select ou insert peu de problemes se posent,
qu'en est il d'un create ?
Les types et le autoincrement par exemple ne sont pas tous gérés pareil ?
J'ai l'habiture du MySQL ... je crois me souvenir que l'auto increment
passe par des mécanismes compliqués oracle ?



Par une sequence, pareil en postgres, mais ca s'exploite d'une facon différente.

Perso tout ce qui est create n'est pas dans mon code java mais dans les
scripts de création de la base, qui sont a coté en fait. Donc joués
en prérequis d'utilisation du produit.

dans mon code je ne trouve donc que des requetes de type insert, update,
delete, select.

Sur le select tu peux trouver des syntax sioux, par exemple chez Oracle.

Et l'exploitation des sequences n'est pas forcement toujours portable.

C'est ce code que j'isole dans des sous classes spécialisées, le role
de chaque méthode de la sous classe spécialisé etant de me renvoyer
la chaine contenant la bonne syntaxe sql.

--
Cordialement,

Patrice Trognon
http://wwW.javadevel.com

Avatar
jlp

tu connais un site qui référence les limites exactes du SQL 92 et
éventuellement pour le reste propose des traductions d'un SGBD à un autre ?

d'autre part, si pour un select ou insert peu de problemes se posent,
qu'en est il d'un create ?
Les types et le autoincrement par exemple ne sont pas tous gérés pareil ?
J'ai l'habiture du MySQL ... je crois me souvenir que l'auto increment
passe par des mécanismes compliqués oracle ?

merci !
Tu peux utiliser aussi un mapping O/R comme par exemple Hibernate qui

propose un langage de requete orienté objet pivot ( HQL), le framework
assurant la "traduction SQL" pour la base cible. Tous les grands SGBD
sont supportés par Hibernate. ( http://www.hibernate.org )
On peut aussi utiliser comme mapping O/R, un FW O/R répondant à la norme
JDO V2.0 qui inclut un langage de requete pivot normalisé JDO-QL.
(http://www.versant.com/downloads)


Cela demande un investissement d'apprentissage non négligeable, mais
quand on a compris cela facilite les développement surtout que ces
frameworks sont accompagnés d'outils de développement.
Pour JDO, Versant a mis Open Access en open-source dans un pluggin
eclipse ( il y a une démo Flash sur leur site).

Avatar
Simon OUALID
Sous Oracle, point d'autoincrement ! Il faut utiliser des sequencess et
les utiliser via SEQ.NEXTVAL !

Je suis preneur aussi d'un site de référence pour le SQL "standard"...

A+

Symon

Pif wrote:

tu connais un site qui référence les limites exactes du SQL 92 et
éventuellement pour le reste propose des traductions d'un SGBD à un autre ?

d'autre part, si pour un select ou insert peu de problemes se posent,
qu'en est il d'un create ?
Les types et le autoincrement par exemple ne sont pas tous gérés pareil ?
J'ai l'habiture du MySQL ... je crois me souvenir que l'auto increment
passe par des mécanismes compliqués oracle ?

merci !


Avatar
Pierre Gilquin
"Simon OUALID" a écrit dans le message de
news:d6ak18$suo$
Sous Oracle, point d'autoincrement ! Il faut utiliser des sequencess et
les utiliser via SEQ.NEXTVAL !



Un peu hors java !
Dans Oracle , on peut utiliser la valeur seq.currval pour la valeur
actuelle. Comment faire avec mysql et son autoincrement pour récuperer la
valeur généré?

Avatar
Trognon Patrice
Pierre Gilquin wrote:


"Simon OUALID" a écrit dans le message de
news:d6ak18$suo$
Sous Oracle, point d'autoincrement ! Il faut utiliser des sequencess et
les utiliser via SEQ.NEXTVAL !



Un peu hors java !
Dans Oracle , on peut utiliser la valeur seq.currval pour la valeur
actuelle. Comment faire avec mysql et son autoincrement pour récuperer la
valeur généré?


public int executeUpdate(String sql, int autoGeneratedKeys)

Parameters:
sql - must be an SQL INSERT, UPDATE or DELETE statement or an SQL statement that returns nothing
autoGeneratedKeys - a flag indicating whether auto-generated keys should be made available for retrieval;
one of the following constants: Statement.RETURN_GENERATED_KEYS Statement.NO_GENERATED_KEYS


public ResultSet getGeneratedKeys() throws SQLException

Retrieves any auto-generated keys created as a result of executing this Statement object.
If this Statement object did not generate any keys, an empty ResultSet object is returned.

Returns:
a ResultSet object containing the auto-generated key(s) generated by the execution
of this Statement object


--
Cordialement,

Patrice Trognon
http://www.javadevel.com