当社 の新人エンジニア研修向けのJSP Servletの問題集です。
参考:MySQL8.x向けのJDBCドライバー
https://qiita.com/syoki/items/3d82ef00300868353572
1 SELECT文
JDBCを使い、employeeテーブルの内容を全てコンソールに出力するプログラムである。
以下の①~⑧を埋めなさい。
<出力例>
1:imai:100000000
2:Yancy Jakovijevic:2000
3:Dori Daveridge:3000
(以下省略)
<employeeのテーブル構造>
<ソースコード> a~cの接続情報は講師から入手してください。(以下同じ)
※このソースコードでは例外を一括して呼び出し側に投げています。
本来は例外の内容に応じたきめ細かい例外処理をすべきですが、論点を明確にするためにそうしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class JdbcSample1 { public static void main(String[] args) throws Exception { final String URL = "/*a*/"; final String ID = "/*b*/"; final String PASS = "/*c*/"; String sql = "SELECT * FROM employee;"; Class./*①*/("com.mysql.cj.jdbc.Driver"); /*②*/ conn = DriverManager.getConnection(URL, ID, PASS); PreparedStatement ps = conn./*③*/(sql); ResultSet rs = ps./*④*/); while (rs./*⑤*/)) { StringBuilder sb = new StringBuilder(); sb.append(rs.getInt("employeeNo")).append(":").append(rs.getString("employeeName")).append(":").append(rs.getInt("salary")); System.out.println(sb); } /*⑥*/.close(); /*⑦*/.close(); /*⑧*/.close(); } } |
2 上記プログラムをWebアプリケーションにしなさい。(Webブラウザで表示する)
研修でJava SE 7 以降を使ってるのであれば、try-with-resources構文を使うこと。
<出力例>
社員番号 | 氏名 | 年収 |
---|---|---|
1 | imai | 100000000 |
2 | Yancy Jakovijevic | 2000 |
3 | Dori Daveridge | 3000 |
4 | Lexie Baylay | 4000 |
5 | Laurena MacKessock | 5000 |
(中略)
3 INSERT文
employeeテーブルに以下のレコードを追加しなさい。
employeeNo:1001
employeeName:あなたの名前
salary:10000000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/InsertSampleServlet") public class InsertSampleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { final String URL = "jdbc:mysql://database-1.c1co8dg0cjjs.ap-northeast-1.rds.amazonaws.com:3306/sample_db?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B9&rewriteBatchedStatements=true"; final String ID = "admin"; final String PASS = "WZ1teWLg0BD0hU7Hnuzf"; int cnt = 0; try { Class.forName("com.mysql.cj.jdbc.Driver"); try (Connection conn = DriverManager.getConnection(URL, ID, PASS); PreparedStatement ps = conn.prepareStatement("/*①*/")) { ret = ps./*②*/(); } } catch (Exception e) { e.printStackTrace(); } PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<meta charset=\"UTF-8\">"); out.println("<title>Insert文</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>" + cnt + "件追加しました。</h1>"); out.println("</body>"); out.println("</html>"); } } |
4 UPDATE文
3.で追加したレコードのsalaryを1桁増やしなさい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/UpdateSampleServlet") public class UpdateSampleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { final String URL = "jdbc:mysql://database-1.c1co8dg0cjjs.ap-northeast-1.rds.amazonaws.com:3306/sample_db?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B9&rewriteBatchedStatements=true"; final String ID = "admin"; final String PASS = "WZ1teWLg0BD0hU7Hnuzf"; int cnt = 0; try { Class.forName("com.mysql.cj.jdbc.Driver"); try (Connection conn = DriverManager.getConnection(URL, ID, PASS); PreparedStatement ps = conn.prepareStatement("/*①*/")) { ret = ps.executeUpdate(); } } catch (Exception e) { e.printStackTrace(); } PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<meta charset=\"UTF-8\">"); out.println("<title>Update文</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>" + cnt + "件更新しました。</h1>"); out.println("</body>"); out.println("</html>"); } } |
5 DELETE文
3.で追加したレコードを削除しなさい。
6 あいまい検索
名前に文字列“ima”を含む社員を検索しなさい。
<出力例>