Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中调用方法时出现NullPointerException_Java_Nullpointerexception - Fatal编程技术网

在java中调用方法时出现NullPointerException

在java中调用方法时出现NullPointerException,java,nullpointerexception,Java,Nullpointerexception,我在我的项目中有一个方法,如下所示: public String fillsubject(String id,int type){ if(id.isEmpty()) return ""; String result=""; String query="select sub_name from subject where sub_id='"+id+"'"; if(type==1) query="select lab_name from

我在我的项目中有一个方法,如下所示:

public String fillsubject(String id,int type){
    if(id.isEmpty())
        return "";
    String result="";
    String query="select sub_name from subject where sub_id='"+id+"'";
    if(type==1)
        query="select lab_name from lab where lab_id='"+id+"'";
    try {
        ResultSet rs2=st2.executeQuery(query);
        rs2.first();
        result=rs2.getString(1);
        rs2.close();
    } catch (Exception ex) {
        JOptionPane.showMessageDialog(this, ex);
    }
    return result;
}
我是这样称呼它的

    try {
        rs = st.executeQuery("Select sub1,sub2,sub3,sub4,sub5,sub6,sub7,lab1,lab2,lab3,class_id from class where standard='" + jComboBox32.getSelectedItem().toString() + "' and section='" + jComboBox26.getSelectedItem().toString() + "';");
        rs.first();
        jTextField39.setText(fillsubject(rs.getString(1),0));
        jTextField32.setText(fillsubject(rs.getString(2),0));
        jTextField33.setText(fillsubject(rs.getString(3),0));
        jTextField40.setText(fillsubject(rs.getString(4),0));
        jTextField35.setText(fillsubject(rs.getString(5),0));
        jTextField41.setText(fillsubject(rs.getString(6),0));
        jTextField38.setText(fillsubject(rs.getString(7),0));
        jTextField37.setText(fillsubject(rs.getString(8),1));
        jTextField34.setText(fillsubject(rs.getString(9),1));
        jTextField36.setText(fillsubject(rs.getString(10),1));
        jLabel198.setText(rs.getString(11));
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(DeleteStudent, e);
    } 
问题是调用rs.getString()时,它在数据库中有时有空值。在这种情况下,fillsubject()方法中会出现一个null指针异常。现在我的问题是如何解决这个问题。
提前谢谢

在方法的开头,添加:

if (id == null)
    return ""; // or whatever you want to represent no value

在方法
fillsubject()
中,而不是使用:

if (id.isEmpty())
使用:

这样,在尝试访问id字符串对象之前,您将检查该对象是否为
null


另外,为了添加信息,在建议的if子句中,仅当第一次比较结果为false时(仅当id不为null时),才会执行
id.isEmpty()。当id为null时,
id.isEmpty()
永远不会执行。

您可以随时检查
getString
返回的
字符串是否为
null

if (result == null) { // handle it! }
通常,您可以使用检查最后一个“get”方法是否表示
null
。当获取其他数据类型(如
int
)时,这是必需的,这些数据类型没有
null
的表示形式

报告上次读取的列的值是否为SQL NULL。请注意,必须首先调用列上的一个getter方法来尝试读取其值,然后调用方法wasNull来查看读取的值是否为sqlnull


我认为最好的处理方法是对结果集运行if语句,然后根据您认为适合您的应用程序的方式处理结果。 例:


我希望这是有道理的

Offtopic,但您的代码受SQL注入的约束。如果可能为null,则需要检查它。类似于
if(rs.getString(1)=null){/*dosomething*/}
只需检查字符串是否为
null
<代码>如果(id==null | | id.isEmpty())返回“”
@fge是正确的,出于性能原因以及参数化变量中SQL命令的自动转义,请始终使用
PreparedStatement
。。。您可以“免费”获得SQL注入保护。谁不喜欢免费的?
if (result == null) { // handle it! }
if (rs.wasNull()) {
    // previous "get" method represents a DB null.
}
if(rs.wasNull()){
// Handle the result } 
else { 
//handle the rest of your code
}