2010-09-30 7 views
1

Je souhaite me connecter à un script hsshldb dans beanshell.Connexion beanshell jdbc, chargement de la classe

J'ai eu des problèmes lors du chargement de la classe, je l'ai écrit avant et il a été répondu.

le code ressemble à ça:

Connection conn = null; 

    try { 
      getClass("org.hsqldb.jdbcDriver").newInstance(); 
      conn = DriverManager.getConnection("jdbc:hsqldb:file:C:/testdata/tdb","SA",""); 
      System.out.println("Connection established"); 
    } 

et je reçois cette erreur:

java.sql.SQLException: No suitable driver found for jdbc:hsqldb:file:C:/testdata/tdb 

et j'ai essayé d'enregistrer le pilote aussi, mais je n'ai pas travaillé

DriverManager.register(getClass("org.hsqldb.jdbcDriver").newInstance()) 

ce code fonctionne déjà dans java (au lieu de getClass() en utilisant Class.forName()) qu'est-ce que les haricots l'enfer a besoin de travailler ce code?

Merci, Bilal

+0

Pour exclure l'un et l'autre, que diriez-vous simplement d'une 'nouvelle ligne org.hsqldb.jdbcDriver();' – BalusC

+0

J'ai également trouvé ce problème. Je suppose que c'est quelque chose à voir avec la façon dont la méthode DriverManager getConnection compare le nom de la classe classloader avec la classe qui a été enregistrée. La logique de chargement de la classe DriverManager semble un peu intéressante, il y a un appel natif là-bas ... – gencoreoperative

Répondre

1

J'abandonnèrent à ce sujet, il n'y avait aucun moyen de charger dynamiquement les classes JDBC, par opposition à d'autres types d'objets, et à la place, je l'utilise maintenant exec Runtime pour appeler le programme de ligne de commande pour la DB. En outre, beanshell a une méthode "exec()". Heureusement, tout ce dont j'avais besoin était d'exécuter des scripts sur la base de données plutôt que d'interagir avec la base de données, et cela fonctionne pour moi.

En outre, la raison pour laquelle JDBC ne se charge pas pour vous est que Beanshell charge parfois son propre chargeur de classe (au lieu du classloader par défaut). Cela arrive surtout si vous essayez de charger dynamiquement des jars dans le script Beanshell. Si vous mettez votre fichier jdbc.jar dans le répertoire Javasoft/ext, dans ce cas, je crois qu'il entrera dans le classloader par défaut. En outre, si votre script Beanshell est suffisamment prudent not to trigger the new classloader, cela peut fonctionner aussi bien. En d'autres termes, ne pas appeler "addClassPath" dans votre script, entre autres choses.

Questions connexes