簡體   English   中英

打印數組條目時出現空指針異常

[英]Null Pointer Exception while printing the array entries

我做了一個Test類,它計算與數據庫中用戶ID對應的條目數(將每個條目稱為電子郵件)。 我使用11120059作為id,數據庫中與此對應的條目數是countMail函數的輸出運行正常,但是由於我從getMail()函數返回一個數組並將其放入新數組,因此向我顯示了null指針異常。 請幫助我陷入其中。 代碼是:

package src.service;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import model.Email;
import model.User;

public class Test {

public int countMail(User user){

    try{

        Class.forName("com.mysql.jdbc.Driver").newInstance();

        // Get a connection to the database
        Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/chillmaarodb", "root", "rsystems");

        PreparedStatement myStatement = myConn.prepareStatement("select * from complaints where RID=? ORDER BY date desc");


        myStatement.setString(1, user.getId());

        ResultSet rs = myStatement.executeQuery();

        int count=0;

        while(rs.next())
        {
        count++;
        }

        return count;
    }

    catch(Exception e){
        e.printStackTrace();
    }

    return 0;

}

public Email[] getMail(User user){

    try{

        Class.forName("com.mysql.jdbc.Driver").newInstance();

        // Get a connection to the database
        Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/chillmaarodb", "root", "rsystems");

        PreparedStatement myStatement = myConn.prepareStatement("select * from complaints where RID=? ORDER BY date desc");


        myStatement.setString(1, user.getId());

        ResultSet rs = myStatement.executeQuery();

        Home home= new Home();

        int length = home.countMail(user);

        Email[] mail = new Email[length];

        int i=0;

        while(rs.next())
        {
        mail[i].setMessage((String) rs.getString(5));
        mail[i].setTitle((String) rs.getString(4)); 
        mail[i].setSender((String) rs.getString(2));
        mail[i].setReceiver((String) rs.getString(1));
        i++;
        }

        return mail;

        }
    catch (Exception e){

        e.printStackTrace();

    }

    Email[] dummyMail = new Email[1];

    return dummyMail;



}

public static void main(String[] args){

    Test test = new Test();

    User user = new User();

    user.setId("11120059");

    System.out.println(test.countMail(user));

    Email[] email = test.getMail(user);

    for (int i=0 ; i<test.countMail(user) ; i++){

        System.out.println(email[i].getSender());

    }


}

}

輸出為:

2 

java.lang.NullPointerException
    at src.service.Test.getMail(Test.java:73)
    at src.service.Test.main(Test.java:107)
Exception in thread "main" java.lang.NullPointerException
    at src.service.Test.main(Test.java:111)

當您編寫Email[] mail = new Email[length]; 您創建一個給定長度的數組,其中包含空引用。 您不能通過此命令自動創建該數組的所有對象。 添加mail[i] = new Email()語句:

    Email[] mail = new Email[length];

    int i=0;

    while(rs.next())
    {
    mail[i] = new Email(); // or use appropriate constructor parameters
    mail[i].setMessage((String) rs.getString(5));
    mail[i].setTitle((String) rs.getString(4)); 
    mail[i].setSender((String) rs.getString(2));
    mail[i].setReceiver((String) rs.getString(1));
    i++;
    }

還要注意,當創建一個dummyMail數組時,它也是一個具有單個null dummyMail數組,因此也不會在其中創建Email對象。 可能您需要:

Email[] dummyMail = new Email[] {new Email()};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM