psr*_*psr 2 java arrays jdbc nullpointerexception
我创建了一个类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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
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)
Run Code Online (Sandbox Code Playgroud)
在编写时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++;
}
Run Code Online (Sandbox Code Playgroud)
另请注意,在创建dummyMail
数组时,它也是一个具有单null
引号的数组,Email
也不会在那里创建对象.可能你需要:
Email[] dummyMail = new Email[] {new Email()};
Run Code Online (Sandbox Code Playgroud)