質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

1654閲覧

JavaデーターベースでNullPointerException

ShiNoBu_7012

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2021/06/16 08:34

前提・実現したいこと

JavaでMySQLのデータを登録するシステムを作っています。
以下のエラーメッセージが発生しました。

**エラーメッセージ** タイプ 例外報告 メッセージ [/JSP/insert_Result.jsp] の処理中に行番号 [15] で例外が発生しました。 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 org.apache.jasper.JasperException: [/JSP/insert_Result.jsp] の処理中に行番号 [15] で例外が発生しました。 12: <h2>登録結果</h2> 13: <br> 14: <%=error %> 15: <%if(count!=0) { %> 16: <%=count %>件のデータを登録しました。 17: <%} %> 18: </body> Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:626) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:515) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) websample.InsertServlet.doPost(InsertServlet.java:34) javax.servlet.http.HttpServlet.service(HttpServlet.java:652) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因 java.lang.NullPointerException org.apache.jsp.JSP.insert_005fResult_jsp._jspService(insert_005fResult_jsp.java:135) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) websample.InsertServlet.doPost(InsertServlet.java:34) javax.servlet.http.HttpServlet.service(HttpServlet.java:652) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

該当のソースコード

Java

1package websample; 2 3import java.io.IOException; 4 5import javax.servlet.ServletException; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10public class InsertServlet extends HttpServlet { 11 public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { 12 13 String error = ""; 14 try { 15 request.setCharacterEncoding("UTF-8"); 16 17 Account account = new Account(); 18 account.setId(request.getParameter("id")); 19 account.setName(request.getParameter("name")); 20 account.setMail(request.getParameter("mail")); 21 account.setAuthority(request.getParameter("auhtority")); 22 23 AccountDao objDao = new AccountDao(); 24 25 int count = objDao.insert(account); 26 27 request.setAttribute("count", count); 28 }catch(IllegalStateException e) { 29 error = "DB 接続エラーが発生しました。"; 30 }catch(Exception e) { 31 error = "予期せぬエラーが発生しました。"; 32 }finally { 33 request.setAttribute("error", error); 34 request.getRequestDispatcher("/JSP/insert_Result.jsp").forward(request, response); 35 } 36 } 37} 38

Java

1package websample; 2 3public class Account { 4 String id; 5 String name; 6 String mail; 7 String authority; 8 9 public String getId() { 10 return id; 11 } 12 public void setId(String id) { 13 this.id = id; 14 } 15 public String getName() { 16 return name; 17 } 18 public void setName(String name) { 19 this.name = name; 20 } 21 public String getMail() { 22 return mail; 23 } 24 public void setMail(String mail) { 25 this.mail = mail; 26 } 27 public String getAuthority() { 28 return authority; 29 } 30 public void setAuthority(String authority) { 31 this.authority = authority; 32 } 33 34}

Java

1package websample; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7import java.sql.Statement; 8import java.util.ArrayList; 9 10public class AccountDao { 11 private static String RDB_DRIVER = "com.mysql.jdbc.Driver"; 12 private static String URL = "jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8"; 13 private static String USER = "root"; 14 private static String PASSWORD = ""; 15 16 public Connection getConnection() { 17 try { 18 Class.forName(RDB_DRIVER); 19 Connection con = DriverManager.getConnection(URL, USER, PASSWORD); 20 return con; 21 }catch(Exception e) { 22 throw new IllegalStateException(e); 23 } 24 } 25 public ArrayList<Account> search(String id) { 26 Connection con = null; 27 Statement smt = null; 28 29 ArrayList<Account>list = new ArrayList<>(); 30 31 String sql = "SELECT * FROM tb_staff WHERE id LIKE '%"+id+"%'"; 32 33 try { 34 con = getConnection(); 35 smt = con.createStatement(); 36 37 ResultSet rs = smt.executeQuery(sql); 38 39 while(rs.next()) { 40 Account account = new Account(); 41 account.setId(rs.getString("id")); 42 account.setName(rs.getString("name")); 43 account.setMail(rs.getString("mail")); 44 account.setAuthority(rs.getString("authority")); 45 list.add(account); 46 } 47 }catch(Exception e) { 48 throw new IllegalStateException(e); 49 }finally { 50 if(smt!=null) { 51 try {smt.close();}catch(SQLException ignore) {} 52 } 53 if(con!=null) { 54 try {con.close();}catch(SQLException ignore) {} 55 } 56 } 57 return list; 58 } 59 public int insert(Account account) { 60 Connection con = null; 61 Statement smt = null; 62 63 int count = 0; 64 65 String sql = "INSERT INTO tb_staff(id, name, mail, authority)VALUES(account.getId(),account.getName(),account.getMail(),account.getAuthority())"; 66 67 try { 68 con = getConnection(); 69 smt = con.createStatement(); 70 count = smt.executeUpdate(sql); 71 }catch(Exception e) { 72 throw new IllegalStateException(e); 73 }finally { 74 if(smt!=null) { 75 try {smt.close();}catch(SQLException ignore) {} 76 } 77 if(con!=null) { 78 try {con.close();}catch(SQLException ignore) {} 79 } 80 } 81 return count; 82 } 83}

Java

1<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> 2 3<html> 4 <head> 5 <title>登録</title> 6 </head> 7 <body> 8 <form action="<%=request.getContextPath() + "/websample.InsertServlet"%>"method="post"> 9 <table> 10 <tr> 11 <td>ID</td> 12 <td><input type="text" name="id"></td> 13 </tr> 14 <tr> 15 <td>名前</td> 16 <td><input type="text" name="name"></td> 17 </tr> 18 <tr> 19 <td>メール</td> 20 <td><input type="text" name="mail"></td> 21 </tr> 22 <tr> 23 <td>権限</td> 24 <td><input type="text" name="authority"></td> 25 </tr> 26 <tr> 27 <td colspan="2"><input type="submit" value="登録"></td> 28 </tr> 29 </table> 30 </form> 31 </body> 32</html>

Java

1<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> 2<% 3Integer count =(Integer)request.getAttribute("count"); 4String error =(String)request.getAttribute("error"); 5%> 6 7<html> 8 <head> 9 <title>登録</title> 10 </head> 11 <body> 12 <h2>登録結果</h2> 13 <br> 14 <%=error %> 15 <%if(count!=0) { %> 16 <%=count %>件のデータを登録しました。 17 <%} %> 18 </body> 19</html>

補足情報(FW/ツールのバージョンなど)

Eclipse 2020

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/06/16 09:35

InsertServlet の doPost メソッドの finally で jsp を表示してるので、try の途中で例外が発生したら count がセットされないのでしょう。 request.setAttribute("count", count); も finally に移して、error を確認しましょう。
ShiNoBu_7012

2021/06/16 09:52 編集

登録結果 DB 接続エラーが発生しました。と出ました。
hoshi-takanori

2021/06/16 10:24

DB 接続に失敗してるんでしょうね。 catch(IllegalStateException e) のところで e.printStackTrace(); すると詳しい原因がわかるかも。
ShiNoBu_7012

2021/06/17 05:53 編集

数値なら登録可能なんですが、数値以外だとエラーが起こります。
m.ts10806

2021/06/19 05:45

テーブル定義提示してください。 そもそも型が整数型なら数値以外は使えません。
guest

回答1

0

なぜ実行時エラー(NullPointerException)が発生しているかを確認しましょう。
例を挙げると以下のようなものがあるかと思います。

  • request.setAttribute("count", count);が想定通り実行されていないから
  • objDao.insert(account)の返り値がnullであるから

以下のようにログを仕込み,countに数値がセットされているかを確認してください。

java

1AccountDao objDao = new AccountDao(); 2 3int count = objDao.insert(account); 4 5System.out.println("count: " + count); 6

また,以下のAccountDao.javaのinsertメソッドについて,想定した値がDBに登録されているでしょうか。tb_staffテーブルに対し,SELECT * FROM tb_staff;を実行してください。

java

1String sql = "INSERT INTO tb_staff(id, name, mail, authority)VALUES(account.getId(),account.getName(),account.getMail(),account.getAuthority())";

java

1String sql = "INSERT INTO tb_staff(id, name, mail, authority)VALUES( " + account.getId() + ", " + account.getName() + ", " + account.getMail() + ", " + account.getAuthority() + ")";

投稿2021/06/16 10:23

編集2021/06/16 10:25
Jp_ryos

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShiNoBu_7012

2021/06/17 05:53 編集

数値なら登録可能なんですが、数値以外だとエラーが起こります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問