gpt4 book ai didi

java - 打印数组条目时出现空指针异常

转载 作者:行者123 更新时间:2023-12-03 23:01:34 24 4
gpt4 key购买 nike

我制作了一个类 Test,它计算数据库中与用户 ID 对应的条目数(将每个条目称为电子邮件)。我使用 11120059 作为 id,数据库中与此对应的条目数为 2。countMail 函数的输出工作正常,但因为我从 返回一个数组>getMail() 函数并将其放入新数组,它向我显示空指针异常。请帮助我陷入困境。代码是:

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 引用的数组,不会创建 Email 对象那里也一样。可能你需要:

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

关于java - 打印数组条目时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31715526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com