Faire un file jar contenant des commands SQL dans Netbeans

J'ai un programme dans Netbeans qui utilise SQL pour se connecter à une database Access. Je suis prêt à finaliser et à faire un file jar hors du programme, mais quand je «construis et nettoie» et que j'essaie ensuite de lancer le programme, j'obtiens:

java.sql.SQLException: [Microsoft] [Gestionnaire de pilotes ODBC] Nom de la source de données introuvable et aucun pilote par défaut spécifié

Dans mon code, j'accède directement à la database en utilisant:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\\Users\\d9t\\Desktop\\Resource_DB.accdb"); 

Je n'ai pas fait cela (JDBC-ODBC) depuis de nombreuses années, mais je pense qu'en plus de ce que vous avez fait, vous devez également append la source de données comme ceci: http://msdn.microsoft.com/fr-fr /library/ca6axakh(v=vs.80).aspx

Il semble que votre jar de pilote peut devoir être ajouté au classpath lorsque vous exécutez le programme. Exécutez le programme en spécifiant un path de class (-classpath ou -cp)

 java -classpath driver.jar;myprogram.jar my.package.MainClass 

où my.package.MainClass si la class que vous souhaitez exécuter

J'ai juste essayé de recréer votre problème en utilisant NetBeans 7.4 et j'ai échoué. Mon projet a fonctionné correctement dans l'EDI NetBeans, et après avoir fait un "Clean and Build" il a également fonctionné avec succès à partir de la command line via

 java -jar AccessTest.jar 

Pour des raisons de diagnostic, essayez ceci:

Ajoutez les deux lignes de code suivantes comme les toutes premières lignes de votre méthode main :

 System.out.println(System.getProperty("sun.arch.data.model")); System.exit(0); 

Exécutez votre code dans l'IDE et notez le numéro qu'il imprime sur la console. (Ce sera soit "32" ou "64".)

Ensuite, reconstruisez votre projet et exécutez le file .jar à partir de la command line. Est-ce qu'il signale la même valeur lorsque vous l'exécutez de cette façon?

Modifier re: commentaire

La sortie des diagnostics ci-dessus a confirmé le problème. La version 32 bits du moteur de database Access (aka "ACE") a été installée sur la machine et la configuration NetBeans a été configurée pour exécuter l'application dans une machine virtuelle Java 32 bits à partir de NetBeans. Toutefois, lorsque le file .jar était exécuté à partir de la command line, il s'exécutait dans une machine virtuelle Java 64 bits, de sorte que le pilote Access ODBC n'était pas disponible.

Le point key ici est que le "bitness" du pilote ACE installé devra correspondre au "bitness" de la JVM sous laquelle l'application Java est en cours d'exécution. Ce n'est pas vraiment quelque chose que vous, en tant que développeur, pouvez contrôler. Même si vous devez utiliser le test System.getProperty pour identifier le "bitness" sous lequel l'application s'exécute, vous ne pouvez pas garantir que le pilote ACE correspondant sera installé.

Ce que vous pouvez faire est de build votre application pour utiliser l'ancien pilote "Jet" 32 bits …

 {Microsoft Access Driver (*.mdb)} 

… parce que c'est disponible sur toutes les machines Windows. Votre file de database doit utiliser le format de file .mdb plus ancien (car Jet ne peut pas lire les files .accdb ) et vous pouvez utiliser le test System.getProperty pour vous assurer que l'application s'exécute sous une machine .accdb 32 bits. (Autrement dit, si l'appel renvoyait "64", dites simplement à l'user qu'il doit exécuter l'application sous une machine virtuelle Java 32 bits, puis quitter.)

Je suis tombé sur cette correction http://ucanaccess.sourceforge.net/site.html

Installez UCanAccess-2.0.1-bin.zip et incluez tous les files. J'ai rencontré quelques bugs mineurs tels que ne pas pouvoir passer 'et' dans Access, mais il permet aux ordinateurs 64 bits de connecter l'access 32 bits avec succès.

J'espère que cela vous aide à accéder aux programmeurs!