难以理解的NullPointerException,或者看起来如此

时间:2013-05-22 20:57:06

标签: java nullpointerexception derby

我正在使用JavaDB和Derby来修改数据库。我试图用

创建一个视图
statement.executeUpdate(SQLUpdate);

其中SQLUpdate是用于创建视图的SQL命令的查询,但由于某种原因,Java会在SQLUpdate上抛出NullPointerException,即使我已经声明它如此:private String SQLUpdate;。 //我首先尝试将它声明为局部变量,但之后又将其声明为可用于整个类的私有变量。如果这是C ++,我会做这个工作,但鉴于这是Java,我无法访问指针业务。

有人可以告诉我为什么Java可能会抛出NullPointerException吗? //我在这里阅读了文档:http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29(查找executeUpdate()),但它没有说任何关于将SQL查询存储到String变量然后使用executeUpdate(myStringVariable);

3 个答案:

答案 0 :(得分:1)

当你写这篇文章时,你似乎忘了初始化你的变量SQLUpdate。声明之后,您应该在executeUpdate方法中>之前将其初始化为。因此,你得到了NPE。

你可以执行direclty你的查询:

s.executeUpdate("INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('RICH', 123)");

或者如果你创建了一个像你这样的变量:

private String SQLUpdate;

//in your code/method/etc..
SQLUpdate = "INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('RICH', 123)";
s.executeUpdate(SQLUpdate);

您的statement对象也可能是nullHere's一个链接,显示了使用db进行基本操作的示例。

答案 1 :(得分:1)

当您尝试调用方法或引用对象为null的属性时,Java会抛出NullPointerException(通常缩写为NPE)。

如上面的评论所述,您的statement对象可能为空。或者,语句executeUpdate方法中的某些内容可能会尝试以这种方式访问​​null属性。

如果查看堆栈跟踪,它应该准确地告诉您产生错误的行,并帮助您诊断哪个对象为空。

答案 2 :(得分:0)

如果你只提到你提到的SQLUpdate,那么它将具有默认值。 Java中对象属性的默认值为null,导致NullPointerException。您需要将SQL设置为SQLUpdate属性才能使其正常工作。