Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/02/2017, à 19:33

Omega38

[Résolu]Connexion d'une base hsqldb avec python

Bonjour,
J'essaye de me connecter à une base hsqldb avec un script python, en utilisant hsqldb.jar et jaydebeapi.
Je souhaite mettre la base dans un autre répertoire que celui du script, le script est dans /home/az/eric_workspaces/hsqldb, la base et le hsqldb.jar dans /home/az/eric_workspaces/hsqldb/Utils

Je peux créer une connexion à la base de la façon suivante :

chdir("/home/az/eric_workspaces/hsqldb/Utils")
conn = jaydebeapi.connect('org.hsqldb.jdbcDriver', ['jdbc:hsqldb:file:baseCles.hsql', 'SA', ''], 'hsqldb.jar',)

Cette connexion est parfaitement fonctionnelle et me permet par la suite de lancer mes requêtes sur ma base "baseCles.hsql".

La difficulté commence en essayant de mettre les arguments de la connexion dans des variables :

maVar1 = "'org.hsqldb.jdbcDriver',"
maVar2 = "['jdbc:hsqldb:file:baseCles.hsql', 'SA', ''],"
maVar3 = "'hsqldb.jar',"

Un

 print maVar1, maVar2, maVar3 

renvoie

'org.hsqldb.jdbcDriver', ['jdbc:hsqldb:file:baseCles.hsql', 'SA', ''], 'hsqldb.jar',

qui semble correspondre à ce qui est requis dans la connexion.
Cependant, lorsque je lance

conn = jaydebeapi.connect(maVar1, maVar2, maVar3 )  

l'erreur suivante est renvoyée :

java.lang.RuntimeException: Class org.hsqldb.jdbcDriver', ['jdbc:hsqldb:file:baseCles.hsql', 'SA', ''], 'hsqldb.jar' not found

Auriez vous une idée sur l'erreur que je commets?
D'avance merci.

Dernière modification par Omega38 (Le 09/02/2017, à 06:26)

Hors ligne

#2 Le 02/02/2017, à 21:20

J5012

Re : [Résolu]Connexion d'une base hsqldb avec python

d'ou proviennent hsqldb.jar et jaydebeapi ?

hsqldb est supporté dans xenial, seul est requis JayDeBeApi pour l'acces avec python
https://pypi.python.org/pypi/JayDeBeApi/

Hors ligne

#3 Le 03/02/2017, à 05:31

Omega38

Re : [Résolu]Connexion d'une base hsqldb avec python

Merci de vous intéresser à mon problème,

j'ai installé jaydebiapi avec pip, et téléchargé hsqldb.jar depuis sourceforge.

Hors ligne

#4 Le 04/02/2017, à 07:55

J5012

Re : [Résolu]Connexion d'une base hsqldb avec python

maVar1 = "'org.hsqldb.jdbcDriver',"
maVar2 = "['jdbc:hsqldb:file:baseCles.hsql', 'SA', ''],"
maVar3 = "'hsqldb.jar',"

→ erreur de reflexion logique classique ...

si tu integres les virgules dans les variables, la connexion jdbc contient des virgules doubles !
or les virgules ne designent pas des valeurs mais seulement des symboles de separation de la fonction ...

supprime les virgules des variables

maVar1 = "'org.hsqldb.jdbcDriver'"
maVar2 = "['jdbc:hsqldb:file:baseCles.hsql', 'SA', '']"
maVar3 = "'hsqldb.jar'"

la virgule apres le fichier jar seulement si tu as plusieurs fichiers de class ... (la variable classpath n'etant pas definie)
le chemin de la class doit etre ecrit en chemin absolu, meme pour un fichier jar relatif au script d'acces :

./fichier-class.jar

Hors ligne

#5 Le 04/02/2017, à 08:50

Omega38

Re : [Résolu]Connexion d'une base hsqldb avec python

Bonjour,
Malheureusement ça ne fonctionne pas :

Exception "unhandled java.lang.RuntimeExceptionPyRaisable"
java.lang.RuntimeException: Class 'org.hsqldb.jdbcDriver' not found
File: /usr/local/lib/python2.7/dist-packages/jpype/_jclass.py, Line: 55

Pourrais-tu me donner plus d'explications sur ta phrase :

J5012 a écrit :

la virgule apres le fichier jar seulement si tu as plusieurs fichiers de class ... (la variable classpath n'etant pas definie)

Je suis débutant, et n'ai pas encore bien intégré certains concepts.
Merci.

Dernière modification par Omega38 (Le 04/02/2017, à 08:51)

Hors ligne

#6 Le 04/02/2017, à 09:01

J5012

Re : [Résolu]Connexion d'une base hsqldb avec python

ha oui c'est vrai, mavar c'est pas $mavar
la fonction connect demande une variable type string d'où les quotes simples pour dire == le resultat de cette variable

org.hsqldb.jdbcDriver est deja une variable de type string

si tu la mets dans une autre variable non string, tu fais une conversion de type ...

donc ton code devrait etre comme :

$maVar1 = "'org.hsqldb.jdbcDriver'"
$maVar2 = "['jdbc:hsqldb:file:baseCles.hsql', 'SA', '']"
$maVar3 = "'hsqldb.jar'"
conn = jaydebeapi.connect($maVar1, $maVar2, $maVar3)  

Hors ligne

#7 Le 04/02/2017, à 17:04

Omega38

Re : [Résolu]Connexion d'une base hsqldb avec python

Le $ devant la variable crée une erreur de syntaxe, mais ta remarque m'a fait penser à tester :

maVar1 = str('org.hsqldb.jdbcDriver,')

les autres variables étant traitées de la même façon.
Dans ce cas, j'ai l'erreur suivante :

The debugged program raised the exception unhandled java.sql.SQLExceptionPyRaisable
"java.sql.SQLException: No suitable driver found for ['jdbc:hsqldb:file:baseCles.hsql', 'SA', '']"

Ensuite, j'ai rajouté des quotes doubles :

maVar1 = str("'org.hsqldb.jdbcDriver',")

L'erreur n'est plus la même :

Exception "unhandled java.lang.RuntimeExceptionPyRaisable"
java.lang.RuntimeException: Class 'org.hsqldb.jdbcDriver', not found

Mettre ou pas des virgules à la fin de chaque variable ne change rien.

Hors ligne

#8 Le 06/02/2017, à 23:07

J5012

Re : [Résolu]Connexion d'une base hsqldb avec python

oups oui , ca doit plutot etre :

maVar1 = "'org.hsqldb.jdbcDriver'"
maVar2 = "'jdbc:hsqldb:file:baseCles.hsql'"
maVar3 = "'SA'"
maVar4 = "'hsqldb.jar'"
conn = jaydebeapi.connect(maVar1, maVar2, maVar3, maVar4,)

je passe souvent d'une syntaxe à une autre , bash, python, php, js etc ...
pas de pre-typage en python pour les variables ...

essaie aussi ca :

maVar = "'org.hsqldb.jdbcDriver', 'jdbc:hsqldb:file:baseCles.hsql', 'SA', '', 'hsqldb.jar',"

conn = jaydebeapi.connect(maVar)

il n'y a pas de raison de mettre les crochets [ ] qu'on utilise pour indiquer une optionnalité ...

Hors ligne

#9 Le 09/02/2017, à 05:37

Omega38

Re : [Résolu]Connexion d'une base hsqldb avec python

Merci de ton aide qui m'a permis d'arriver au résultat.
En fait, connect() ne prend que 3 arguments, qui sont donc :

        maVar1 = 'org.hsqldb.jdbcDriver'
        maVar2 = 'jdbc:hsqldb:file:baseCles.hsql'
        maVar3 = 'hsqldb.jar'

puis la connexion fonctionnelle :

        chdir("/home/az/eric_workspaces/hsqldb/Utils")
        conn = jaydebeapi.connect(maVar1, maVar2, maVar3) 

Hors ligne