0

私はjsfアプリケーションを開発しています。30 ~ 40 列と 600 行で構成される MySQL Student テーブルがあります。StudentBean のコードは次のとおりです。

@ManagedBean(name = "student")
@SessionScoped
public class StudentBean implements Serializable{

private List<Student> studentlist = new ArrayList<Student>();
private Student student = new Student();
private HtmlDataTable datatable;
private HtmlInputHidden studentnpm = new HtmlInputHidden();
private String querybynpm;
private String querybyangkatan;
private String status;
private String result;

public String init() {

    try {
        Class.forName(JurusanConection.getDriver());
    } catch (ClassNotFoundException e) {
        System.out.println(e.getMessage());
    }


    try {
        Connection con = DriverManager.getConnection(JurusanConection.getUrl(),
                JurusanConection.getUser_name(), JurusanConection.getPass_word());

        String query = "SELECT * FROM student";
        Statement ps = con.createStatement();
        ResultSet rs = ps.executeQuery(query);

        while (rs.next()) {
            Student students = new Student();
            students.setNpm(rs.getString("npm"));
            students.setNama(rs.getString("nama").toString());
            //setter and getter 
            students.setTanggalregistrasi(rs.getString("tanggalregistrasi").toString());
            students.setDosenwali(rs.getString("dosenwali").toString());
            students.setEmail(rs.getString("email"));
            students.setKelas(rs.getString("kelas"));
            studentlist.add(students);
        }
        result="mahasiswa";
        ps.close();
        con.close();

    } catch (SQLException e) {
        setResult(null);
        setStatus(e.getMessage());
    }
    return result;
}

コンストラクターを介してデータベースにデータを入力しませんでしたが、init() メソッドを呼び出しました。エラー メッセージ javax.faces.el.E​​valuationException: java.lang.NullPointerException が表示されました。ただし、クエリを変更して表示数を 150 行に制限すると、エラーは発生しません。エラーなしでこの 600 行を表示する方法を誰でも理解できますか? ありがとうございました...

4

1 に答える 1

1

次の安全でないコード行でNullPointerExceptionsが発生している可能性があります。

rs.getString("nama").toString()
rs.getString("tanggalregistrasi").toString()
rs.getString("dosenwali").toString()

これにより、レコードセット内のこれら3つの列にnull値が存在することはないと想定されます。これを変数に割り当て、.演算子を使用する前にnullチェックを実行する必要があります。

さらに、なぜここでtoString()を呼び出すのですか? ResultSet.getStringメソッドはすでにStringオブジェクトを返します。これは完全に不要です。

于 2013-02-20T12:21:08.733 に答える