【问题标题】:Does Java Postgresql Driver support Array Datatype, getting NullPointerExceptionJava Postgresql 驱动程序是否支持数组数据类型,得到 NullPointerException
【发布时间】:2018-06-16 17:49:08
【问题描述】:

我使用的是 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();

但由于 urlData 为空,最后一行以 NullPointerException 失败

这是为什么,是不是Postgresql不支持Array,教程中说Mysql不支持

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

或者它只是空,因为没有特定行的 url 数据?

尝试使用答案中建议的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)

【问题讨论】:

  • 您使用的是什么版本的 PostgreSQL JDBC 驱动程序?
  • 链接教程只指出缺乏对 MySQL 和 Java DB 的支持,因为它们也是 Oracle 产品。这并不意味着所有其他 JDBC 驱动程序都支持它们,尽管 PostgreSQL driver does support arrays. AbstractMethodError 建议您使用的是旧版本的驱动程序(您尝试的 getObject 方法是在 Java 7 / JDBC 4.1 中引入的),请考虑升级到更新版本的 PostgreSQL JDBC 驱动程序。
  • @MarkRotteveel 我建议使用 getObject 然后我删除了它,因为当我尝试使用 String[] urls = rs.getObject("urls", String[].class); 时出现错误 The org.postgresql.jdbc4.Jdbc4ResultSet.getObject (int, Class <T>) function is not yet implemented. 我正在使用 mvnrepository.com/artifact/postgresql/postgresql/… 你知道为什么会出现这个错误请?我回滚了我的解决方案,您可以检查我的错误可能在哪里
  • @YCF_L 是的,使用更新的版本,比如版本 42.2.2(例如 mvnrepository.com/artifact/org.postgresql/postgresql/42.2.2
  • 谢谢@MarkRotteveel 现在我的解决方案给了我org.postgresql.util.PSQLException: conversion to class [Ljava.lang.String; from 2 003 not supported

标签: java postgresql jdbc


【解决方案1】:

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

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

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

【讨论】:

  • 也许我会再试一次,但是 getObjects() 失败,出现上述异常,驱动程序不支持
  • @PaulTaylor 是的,我已经尝试过我的第二个解决方案,似乎 getObject 的实现并不完整,但你可以用第一个解决你的问题
  • 谢谢你是对的,它只是失败了,因为没有一行数据,现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
相关资源
最近更新 更多