当连接到jdbc时,没有发现异常“java.time.temporal.TemporalField”:Matlab中的postgresql

问题描述:

我试图从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

看来你不使用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