Java Postgresql驱动程序是否支持Array数据类型,获取NullPointerException

时间:2018-06-14 15:07:32

标签: java postgresql jdbc

我使用Postgres 9.3,我得到了像这样的Java数据库驱动程序

try {
    Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
    System.err.println("Couldn't load org.postgresql.Driver");
    System.exit(1);
}

然后我这样做:

  Array urlData = rs.getArray("urls");
  String[] urls = (String[]) urlData.getArray();

但是最后一行失败了NullPointerException,因为urlData为空

为什么这样,Postgresql不支持Array,教程确实说不支持Mysql

https://docs.oracle.com/javase/tutorial/jdbc/basics/array.html

或者它只是null,因为没有特定行的网址数据?

在回答中建议使用getObject的尝试失败

Exception in thread "main" java.lang.AbstractMethodError: Method org/postgresql/jdbc4/Jdbc4ResultSet.getObject(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; is abstract
        at org.postgresql.jdbc4.Jdbc4ResultSet.getObject(Jdbc4ResultSet.java)
        at com.jthink.jthinksearch.index.indexer.discogs.ArtistIndex.documentFromResultSet(ArtistIndex.java:209)
        at com.jthink.jthinksearch.index.indexer.discogs.ArtistIndex.indexData(ArtistIndex.java:176)
        at com.jthink.jthinksearch.index.indexer.IndexBuilder.buildDatabaseIndex(IndexBuilder.java:226)
        at com.jthink.jthinksearch.index.indexer.IndexBuilder.buildIndex(IndexBuilder.java:151)
        at com.jthink.jthinksearch.index.indexer.IndexBuilder.main(IndexBuilder.java:119)

1 个答案:

答案 0 :(得分:2)

我想是因为它只是null,因为没有特定字段的网址数据?

要解决您的问题,您可以使用:

Array urlData = rs.getArray("urls");
String[] urls = urlData != null ? (String[]) urlData.getArray() : null;//or a default value