2017-10-16 3 views
0

J'essaye de me connecter à une base de données PostgreSQL de Matlab. Ceci est mon code:Classe non trouvée exception "java.time.temporal.TemporalField" lors de la connexion à jdbc: postgresql de Matlab

javaclasspath('/usr/share/java/postgresql-jdbc4.jar'); 
properties = java.util.Properties; 
properties.setProperty('user', '********'); 
properties.setProperty('password', '********'); 
driver = org.postgresql.Driver; 
url = 'jdbc:postgresql://127.0.0.1:5432/DBNAME'; 
connection = driver.connect(url, properties) 

Je reçois l'exception suivante:

Error using org.postgresql.Driver/connect 
Java exception occurred: 
java.lang.NoClassDefFoundError: java/time/temporal/TemporalField 
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:322) 
    at org.postgresql.Driver.makeConnection(Driver.java:404) 
    at org.postgresql.Driver.connect(Driver.java:272) 
Caused by: java.lang.ClassNotFoundException: java.time.temporal.TemporalField 
<SNIP> 

Je suis en Matlab R2012a sur Debian. Tout a été installé à partir du référentiel de test. Java est openjdk version "1.8.0_144" et PostgreSQL est 9.6.5-1.

+0

Quelle est la version du pilote JDBC PostgreSQL utilisez-vous? Notez que l'exception elle-même suggère que vous n'utilisez pas réellement Java 8, car 'java.time.temporal.TemporalField' fait certainement partie de Java 8. –

+0

Ah, c'est tout. MATLAB lui-même utilise son propre Java 1.6 JRE, pas le JDK que j'ai installé. – giusti

Répondre

1

Il semble que vous n'utilisiez pas le jdk 1.8.

Voir same topic

Pouvez-vous essayer d'exécuter java -version pour être sûr?

[modifier]

Cette erreur se produit parce que Matlab 2012 ne pas utiliser Java 8. Pour confirmer, exécuter ce dans la coquille Matlab, pas dans votre terminal système:

java -version 

Il est posible de Faites en sorte que Matlab utilise un JDK différent, mais cela peut causer plus de problèmes qu'il n'en résout. La meilleure solution est d'obtenir le PostgreSQL JDBC 4.0, qui convient pour Java 6.

Lien direct: https://jdbc.postgresql.org/download/postgresql-42.1.4.jre6.jar

+0

Il va retourner 'openjdk version" 1.8.0_144 "' quand je cours depuis le terminal (ce que je pensais être la bonne façon de vérifier). Mais quand je fais la même chose à partir du shell Matlab, il renvoie 'Java 1.6.0_17-b04 avec Sun Microsystems ' (que je viens de découvrir). – giusti

+0

Vous pouvez modifier cela voir la documentation: https://www.mathworks.com/help/compiler_sdk/java/configure-your-java-environment.html?s_tid=gn_loc_drop –

+0

Merci de m'avoir aidé à comprendre quel était le problème! Mais j'ai trouvé préférable de simplement avoir un pilote compatible avec Java 6. – giusti