サーバーサイドにJavaを利用しMySQLからデータを取得し一覧表示する処理のサンプル
[作成]
1.MySQLでデータベース[lunchapp]を作成する。
CREATE DATABASE lunchapp DEFAULT CHARACTER SET utf8;
2.データベースlunchappに[lunches]テーブルを作成する。
CREATE TABLE lunches( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(30), menu VARCHAR(30) );
3.初期データを挿入しておく
INSERT INTO lunches(name,menu)VALUES
("subway","チリチキン"),("はなまる","かけうどん(小)"),("吉野家","牛丼(並)")
;
4.エクリプス。新規動的プロジェクトより「lunchapp」を作成する。
5.WEB-INF/lib/の中にJDBC,META-INFの直下にcontext.xmlを配置する。(詳しくは前回の記事参照)
<?xml version="1.0" encoding="UTF-8" ?>
<Context>
<Resource
name="jdbc/jsp"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/lunchapp"
connectionProperties="autoReconnect=true;verifyServerCertificate=false;useSSL=false;requireSSL=false;useUnicode=true;characterEncoding=UTF-8;"
username="root"
validationQuery="select 1"/>
</Context>
6.modelパッケージにLunch.javaを作成する。
●model.Lunch.java
package model;
import java.io.Serializable;
public class Lunch implements Serializable{
private int id;
private String name;
private String menu;
public Lunch() {}
public Lunch(int id,String name,String menu) {
this.id=id;
this.name=name;
this.menu=menu;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMenu() {
return menu;
}
public void setMenu(String menu) {
this.menu = menu;
}
}
「Logic作成」
7.modelパッケージ内にLunchLogic.javaを作成する。
●model.LunchLogic.java
package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class LunchLogic {
public List<Lunch> findAll(){
List<Lunch> list=new ArrayList<>();
Connection db=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/jsp");
db=ds.getConnection();
ps=db.prepareStatement("SELECT * FROM lunches");
rs=ps.executeQuery();
while(rs.next()) {
int id=rs.getInt("id");
String name=rs.getString("name");
String menu=rs.getString("menu");
Lunch l=new Lunch(id,name,menu);
list.add(l);
}
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
rs.close();
ps.close();
db.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
return list;
}
}
8.controllerパッケージ内にTest.java(Servlet)を作成
package controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Lunch;
import model.LunchLogic;
/**
* Servlet implementation class Test
*/
@WebServlet("/Test")
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
LunchLogic ll=new LunchLogic();
List<Lunch> list=ll.findAll();
//System.out.println(list.size());
request.setAttribute("list", list);
RequestDispatcher rd=request.getRequestDispatcher("/WEB-INF/view/test.jsp");
rd.forward(request, response);
}
}
9./WEB-INF/viewフォルダにtest.jspを作成
●test.jsp(/WEB-INF/view/test.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="model.*,java.util.*"%>
<%
List<Lunch> list=(List<Lunch>)request.getAttribute("list");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%if(list !=null && list.size() > 0) {%>
<table border="1">
<%for(Lunch lunch:list){ %>
<tr>
<td><%=lunch.getId() %></td>
<td><%=lunch.getName() %></td>
<td><%=lunch.getMenu() %></td>
</tr>
<%} %>
</table>
<%} %>
</body>
</html>
10.Test.javaをサーバーで実行する。(以下のようになることを確認)

インサート
model.LunchLogic.java(insertOneメソッドを追記)
package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class LunchLogic {
public List<Lunch> findAll(){
List<Lunch> list=new ArrayList<>();
Connection db=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/jsp");
db=ds.getConnection();
ps=db.prepareStatement("SELECT * FROM lunches");
rs=ps.executeQuery();
while(rs.next()) {
int id=rs.getInt("id");
String name=rs.getString("name");
String menu=rs.getString("menu");
Lunch l=new Lunch(id,name,menu);
list.add(l);
}
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
rs.close();
ps.close();
db.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
return list;
}
public void insertOne(Lunch lunch) {
Connection db=null;
PreparedStatement ps=null;
try {
Context context = new InitialContext();
DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/jsp");
db=ds.getConnection();
ps=db.prepareStatement("INSERT INTO lunches(name,menu) VALUES(?,?)");
ps.setString(1, lunch.getName());
ps.setString(2, lunch.getMenu());
ps.executeUpdate();
} catch (NamingException | SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}finally {
try {
ps.close();
db.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
〇controller.TestInsert.java
package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Lunch;
import model.LunchLogic;
/**
* Servlet implementation class TestInsert
*/
@WebServlet("/TestInsert")
public class TestInsert extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/view/form.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String name=request.getParameter("name");
String menu=request.getParameter("menu");
Lunch lunch=new Lunch(name,menu);
LunchLogic ll=new LunchLogic();
ll.insertOne(lunch);
response.sendRedirect("/lunchapp/Test");
}
}
〇/WEB-INF/view/form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/lunchapp/TestInsert" method="post">
なまえ:<input type="text" name="name"><br>
メニュー:<input type="text" name="menu"><br>
<input type="submit" value="登録">
</form>
</body>
</html>
11.TestInsertを実行してデータが挿入できればOK

コメント