Javaの新人エンジニア向け:データベースやフォーム入力時に発生するNullPointerExceptionの解説
こんにちは。ゆうせいです。
Javaの開発現場では、**NullPointerException(通称ヌルポ)**に頻繁に遭遇します。特に、新人エンジニアがデータベースやフォームからデータを取得する際に陥りやすいポイントです。
今回は、なぜヌルポが発生するのか、その回避方法、そして実践的な対策について詳しく解説していきます!
1. NullPointerExceptionとは?
Javaでは、オブジェクトがnullの状態でメソッドを呼び出したり、プロパティへアクセスしようとすると発生するランタイムエラーです。
簡単に言うと、「何もないもの(null)に対して操作しようとしたからエラーになった」ということです。
例:ヌルポの発生例
String str = null;
System.out.println(str.length()); // NullPointerException 発生!
上記のコードでは、str
に**何もセットされていない(null)**ため、length()
メソッドを呼ぼうとするとエラーになります。
2. データベース操作時に発生するNullPointerException
発生するケース
Javaでデータベース(DB)を扱う際、SQLの結果がnullの可能性を考慮していないと、ヌルポが発生します。
例:JDBCを使ったデータ取得
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "user", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT name FROM users WHERE id = 1");
String name = rs.getString("name"); // ここでヌルポの可能性!
System.out.println(name.length()); // ヌルポが発生するかも?
このコードの問題点:
id = 1
のユーザーが存在しない場合、rs.getString("name")
はnull
を返す可能性がある。null.length()
を実行すると、NullPointerExceptionが発生する。
対策
next()
のチェックを行うnull
チェックを行う- Optionalを活用する(Java 8以降推奨)
修正コード
if (rs.next()) { // データがあるか確認
String name = rs.getString("name");
if (name != null) {
System.out.println(name.length());
} else {
System.out.println("名前がnullです");
}
} else {
System.out.println("該当データなし");
}
これで、データが存在しない場合や、nullの可能性を考慮した処理ができます。
3. フォームからのデータ取得時に発生するNullPointerException
Webアプリ開発では、ユーザーの入力データがnullである可能性を考慮しないと、ヌルポが発生します。
例:Servletでのフォームデータ取得
String name = request.getParameter("name");
System.out.println(name.length()); // nameがnullの場合、ヌルポ!
このコードの問題点:
request.getParameter("name")
は、フォームでname
が送信されなかった場合、null
を返す。name.length()
を呼ぶと、NullPointerExceptionが発生する。
対策
null
チェックを行うOptional
を活用する(Java 8以降)
修正コード
String name = request.getParameter("name");
if (name != null) {
System.out.println(name.length());
} else {
System.out.println("名前が入力されていません");
}
Optionalを使った場合(Java 8以降):
Optional.ofNullable(request.getParameter("name"))
.ifPresentOrElse(n -> System.out.println(n.length()),
() -> System.out.println("名前が入力されていません"));
4. NullPointerExceptionの発生を未然に防ぐ方法
① @NonNullアノテーションの活用
Spring BootやLombokを使う場合、@NonNull
を使うとコンパイル時に警告が出せる。
public void printLength(@NonNull String name) {
System.out.println(name.length());
}
引数がnullの場合、実行前にエラーとして検出されるため、安全性が高まる。
② Objects.requireNonNullを使う
String name = Objects.requireNonNull(request.getParameter("name"), "名前は必須です");
System.out.println(name.length());
nullなら即座に例外を投げるため、バグを未然に防げる。
③ デフォルト値を設定する
String name = Optional.ofNullable(request.getParameter("name")).orElse("名無し");
System.out.println(name.length());
nullなら"名無し"をデフォルトで設定できる。
5. まとめ:ヌルポを回避するために
- データベースの取得結果がnullの可能性を考慮する
rs.next()
をチェックnull
チェックを忘れずにOptional
を活用
- フォーム入力がnullの可能性を考慮する
request.getParameter()
の値がnull
でないかチェックOptional.ofNullable()
を使うとスッキリ書ける
- 事前にnullを防ぐ工夫をする
@NonNull
を使う(Spring Boot, Lombok)Objects.requireNonNull()
でチェックorElse()
でデフォルト値を設定
新人エンジニアは特に、「nullの可能性」を常に意識することが大切です!
「この値はnullになる可能性があるか?」と考えながら実装すると、バグを未然に防げるようになります。
実際の開発現場でも役立つ知識なので、ぜひ実践してみてください!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。