从MongoDB Document检索'int'字段会抛出NullPointerException

时间:2016-11-18 20:48:36

标签: java mongodb

我知道 MongoDB 字段名称区分大小写,至少在检索字段的值时。我有以下Java程序。

public class SimpleDocument {
    public static void main(String[] args) {
        Document doc = new Document("String","Aeroplane").append("int", 20);

        String s1 = doc.getString("String");
        String s2 = doc.getString("string");
        System.out.println("s1="+s1+" and s2="+s2);

        int i1 = doc.getInteger("int");
        int i2 = doc.getInteger("Int"); //throws NullPointerException
        System.out.println("i1="+i1+" and i2="+i2);
    }
}

第一个Sysout按预期显示输出,即 s1 =“Airplane” s2 = null 。但是第二个Sysout没有显示任何内容,因为它上方的行引发了一个我无法理解的 NullPointerException

有人可以解释这个逻辑吗?

1 个答案:

答案 0 :(得分:1)

Document doc = new Document("String","Aeroplane").append("int", 20);

String s1 = doc.getString("String");
String s2 = doc.getString("string");
System.out.println("s1="+s1+" and s2="+s2);

int i1 = doc.getInteger("int");
int i2 = doc.getInteger("Int"); //throws NullPointerException
System.out.println("i1="+i1+" and i2="+i2);

对于s1,您正在"String"中阅读,其等于"Aeroplane"

  • s1="Aeroplane";

对于s2,您正在阅读"string",其等于null(您的文档中不存在)。字符串是对象,不是原始数据类型,因此它们能够在其中存储null

  • s2=null;

对于i1,您正在阅读"int",其等于20

  • i1=20;

对于i2,您正在阅读"Int",其等于null(您的文档中不存在)。然后,您尝试将null存储在int原语中。所以你会有例外。

您需要做的是:

Integer i2 = doc.getInteger("Int");

这样可以防止抛出异常,并允许i2=null;