2017-04-07 1 views
0

J'essaye de configurer une base de données Derby distante juste pour m'entraîner. Le code suivant fonctionne sans problème chaque fois que j'accéder à la DB sur mon disque dur:Configuration d'une base de données Derby distante: erreur "Aucun pilote trouvé"

class Test{ 
    public static void main(String[] args) { 
     String protocol = "jdbc:derby:"; 
//  String dbPath = "C:/Java_Practice/derbyDB"; // this dbPath works... 
     String dbPath = "//108.167.141.127/derbyDB";  // and this one doesn't 
     String url = protocol + dbPath; 
     try(Connection conn = DriverManager.getConnection(url)) 
     { 
      System.out.println(conn); 
     } 
     catch(SQLException e){ 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

Je puis téléchargé le répertoire entier derbyDB sur mon site hébergé Hostgator, a obtenu son adresse IP par pinger le serveur et modifié le dbPath var en conséquence . Le code a cessé de fonctionner comme s'il ne pouvait même pas voir la base de données. Qu'est-ce que je rate?

+1

« Aucun pilote approprié trouvé » signifie que les classes Derby ne sont pas dans votre CLASSPATH. Voici quelques documents: http://db.apache.org/derby/docs/10.13/getstart/tgs26250.html –

+0

@Brian Pendleton La chose est, la connexion fonctionne correctement lorsque j'accède à la base de données qui se trouve sur mon disque dur, ce qui signifie que la variable CLASSPATH est correctement configurée. Ce qui ne fonctionne pas, c'est la connexion à la copie de la même base de données que j'ai téléchargée sur mon site Web. Je soupçonne que quelque chose ne va pas avec dbPath var car remplacer 'derbyDB' par un nom arbitraire comme 'xyz' génère la même SQLException ... –

+0

Si la base de données se trouve sur une autre machine, vous devez exécuter Derby Network Server sur cette machine pour traiter les demandes client-serveur à cette machine. Essayez de vous frayer un chemin à travers le didacticiel auquel j'ai lié dans mon précédent commentaire. –

Répondre

0

répondre à ma propre question après des fouilles.

Ce que j'ai trouvé dans la documentation officielle Apache Derby (https://db.apache.org/derby/docs/10.0/manuals/develop/develop14.html):

Vous pouvez spécifier des bases de données qui sont uniquement locale à la machine sur laquelle la machine virtuelle Java est en cours d'exécution.

On dirait que ce que je voulais accomplir ne peut pas être fait ...

+0

L'ensemble manuel Derby 10.0 a plus de 10 ans; essayez de lire la documentation actuelle. Et avant d'abandonner et de conclure que cela «ne peut pas être fait», vous pourriez peut-être essayer d'exprimer précisément ce que vous vouliez accomplir. Pour commencer, Derby prend en charge les configurations Embedded et Client-Server. Lequel essayez-vous d'utiliser? –

+0

@ Bryan Pendleton Merci Bryan, j'apprécie votre aide. Tout ce que je voulais accomplir était d'avoir plus de pratique avec un scénario simulé du monde réel dans le cadre de la préparation de mon prochain examen OCP, rien de plus. Le guide de préparation OCP que j'utilise fait référence à Derby tout le temps, donc le choix était tout simplement naturel. Voyant que cela ne peut pas être fait en un clin d'œil, je suis passé à MySQL à la place; tout fonctionne comme il se doit maintenant. Quant à la documentation ... Honnêtement, je ne savais pas que c'était * ça * vieux :(L'horodatage sur la page dit 'Dernière publication: 01/24/2013' ... Sera plus prudent la prochaine fois –

+0

Pas de soucis Je suis content que vous ayez pu faire votre travail de préparation, si vous voulez essayer Derby encore dans le futur, j'espère que vous pourrez le faire. –

1

On dirait que votre classe de pilote n'est pas chargée. Essayez de le charger avant d'appeler DriverManager.getConnection, et voyez si cela fonctionne.

String driver = "org.apache.derby.jdbc.ClientDriver"; 
Class.forName(driver).newInstance(); 
String protocol = "jdbc:derby:"; 
String dbPath = "//108.167.141.127/derbyDB"+";create=true"; 
String url = protocol + dbPath; 
Connection conn = DriverManager.getConnection(url); 
+0

Le chargement explicite du pilote dans une application Java normale n'a pas été nécessaire depuis Java 6 (JDBC 4), en supposant que le pilote soit compatible avec JDBC 4 et sur le chemin de classe de l'application initiale. –

+0

Oui, c'est correct. Le pilote de ma base de données * est * conforme à la norme JDBC 4. La base de données elle-même est entièrement accessible, traversable et modifiable --- mais seulement quand elle vit sur mon système. Quand il est à distance - pas d'aller. –