#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 :
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