演習課題「テーブルを左結合して表示する」
右の環境には、Servle+JSPでMySQLからplayersテーブルのデータを表示するプログラムが作成してあります。
このファイルを修正して、playersテーブルとjobsテーブルを左結合して、全データを表示してください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
#09:テーブルを結合してデータを取り出そう
ここでは、複数のテーブルを結合して扱う方法を学習します。SQLを使って、サンプルデータベースの「players」テーブルと「jobs」テーブルを結合します。
(tomcat/webapps/mydatabase/ShowSqlServlet.java)// JDBCで、データ呼び出し
// Servlet-JSP間をArryaList<HashMap<String, String>>で渡す
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class ShowSqlServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setAttribute("message", "Hello World!");
String url = "jdbc:mysql://localhost/mydb";
String user = "root";
String password = "";
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement statment = connection.prepareStatement("SELECT * FROM players LEFT JOIN jobs ON jobs.id = players.jobId");
ResultSet results = statment.executeQuery()) {
ArrayList<HashMap<String, String>> rows = new ArrayList<HashMap<String, String>>();
while (results.next()) {
HashMap<String, String> columns = new HashMap<String, String>();
String id = results.getString("id");
columns.put("id", id);
String name = results.getString("name");
columns.put("name", name);
String level = results.getString("level");
columns.put("level", level);
String jobId = results.getString("jobId");
columns.put("jobId", jobId);
String jobName = results.getString("jobName");
columns.put("jobName", jobName);
rows.add(columns);
}
request.setAttribute("rows", rows);
} catch (Exception e) {
request.setAttribute("message", "Exception:" + e.getMessage());
}
String view = "/WEB-INF/views/index.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(view);
dispatcher.forward(request, response);
}
}
(tomcat/webapps/mydatabase/WEB-INF/views/index.jsp)<!-- ServletからArryaListでデータ渡し -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>Java - paiza</title>
<style>body {padding: 30px;}</style>
</head>
<body>
<h1><%= request.getAttribute("message") %></h1>
<%
ArrayList<HashMap<String,String>> rows = (ArrayList<HashMap<String,String>>)request.getAttribute("rows");
%>
<%
for (HashMap<String,String> columns : rows) {
%>
<p>
<%= columns.get("id") %>,
<%= columns.get("name") %>,
<%= columns.get("level") %>,
<%= columns.get("jobId") %>,
<%= columns.get("jobName") %>
</p>
<% } %>
</body>
</html>
- Javaの道>Servlet・JSP
https://www.javaroad.jp/servletjsp/index.html
- Servletアプリ開発:目次 - Web系開発メモ
http://web-dev.hatenablog.com/entry/java/servlet/dev-restful-app/table-of-contents
- JSP(formデータ)とJava Servletプログラムの連携 - はしくれエンジニアもどきのメモ
http://cartman0.hatenablog.com/entry/2015/12/08/181657
- データベース接続 - サーブレット入門
https://www.javadrive.jp/servlet/database/