2017-10-16 63 views
0

我試圖從Matlab連接到PostgreSQL數據庫。這是我的代碼:當連接到jdbc時,沒有發現異常「java.time.temporal.TemporalField」:Matlab中的postgresql

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) 

我得到以下異常:

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> 

我Debian上運行Matlab的R2012a。一切都從測試庫安裝。 Java是openjdk版本「1.8.0_144」,PostgreSQL是9.6.5-1。

+0

哪個PostgreSQL的JDBC驅動程序的版本是您使用?請注意,異常本身表明您實際上並未使用Java 8,因爲'java.time.temporal.TemporalField'絕對是Java 8的一部分。 –

+0

啊,就是這樣。 MATLAB本身使用自己的Java 1.6 JRE,而不是我已經安裝的JDK。 – giusti

回答

1

看來你不使用jdk 1.8。

same topic

你能嘗試執行Java的版本,以確保?

[編輯]

這個錯誤是因爲Matlab的2012並沒有使用Java 8.要確認,在Matlab殼系統中的終端運行這個,不是:

java -version 

它是更多鈔票來使Matlab使用不同的JDK,但這會導致比解決問題更多的問題。更好的解決方案是讓PostgreSQL的JDBC 4.0,

直接連接,適用於Java的6:https://jdbc.postgresql.org/download/postgresql-42.1.4.jre6.jar

+0

當我從終端運行時(我認爲這是檢查的正確方法)它將返回'openjdk版本「1.8.0_144」'。但是,當我從Matlab shell執行相同的操作時,它會返回Java 1.6.0_17-b04和Sun Microsystems (我剛發現)。 – giusti

+0

您可以修改此查看文檔:https://www.mathworks.com/help/compiler_sdk/java/configure-your-java-environment.html?s_tid=gn_loc_drop –

+0

感謝您幫助我意識到問題是什麼!但是我發現最好只獲得一個兼容Java 6的驅動程序。 – giusti

相關問題