LoginSignup
6
10

More than 3 years have passed since last update.

【Java】JDBCをインストールして、servlet + MySQL で接続してみた。( DAO / Bean を使用バージョンあり)

Posted at

◆ 目次

◇ ディレクトリ構成
◇ 【画像】出力内容 & DB内容

  1. JDBC ドライバ導入
  2. context.xml を作成する
  3. 実行(複数パターン)
    1. 【実行】servlet(サーブレット)
    2. 【実行】DAO ~Beanを使わない~
    3. 【実行】DAO ~Beanを使用~

◇ ディレクトリ構成

:file_folder: book
 ┣━ :file_folder: src
 ┃  ┣━ :file_folder: sample
 ┃  ┃  ┣━ :page_facing_up: All.java
 ┃  ┃  ┣━ :page_facing_up: ProductList.java
 ┃  ┃  ┗━ :page_facing_up: ProductList2.java
 ┃  ┃
 ┃  ┣━ :file_folder: dao
 ┃  ┃  ┣━ :page_facing_up: DAO.java
 ┃  ┃  ┗━ :page_facing_up: ProductDAO.java
 ┃  ┃
 ┃  ┗━ :file_folder: bean
 ┃     ┗━ :page_facing_up: Product.java
 ┃
 ┗━ :file_folder: WebContent
    ┣━ :file_folder: META-INF
    ┃  ┗━ :page_facing_up: context.xml
    ┃
    ┗━ :file_folder: WEB-INF
       ┗━ :file_folder: lib
          ┗━ :page_facing_up: mysql-connector-java-5.1.48-bin.jar

◇ 【画像】出力内容 & DB内容

・表示イメージ(左)
・DBの内容(右)
スクリーンショット 2019-10-28 16.04.19.png

1. JDBC ドライバ導入

  1. 公式サイトからmysql-connector-java-8.0.18.zipダウンロード
  2. 解凍するしてmysql-connector-java-5.1.48-bin.jarを取り出す
  3. /WebContent/WEB-INF/lib/mysql-connector-java-5.1.48-bin.jarに入れる

2. context.xml を作成する

/WebContent/META-INF/context.xmlに作成する

context.xml
<?xml version="1.0" encoding="UTF-8" ?>
<Context>
    <Resource name = "jdbc/book"
              auth = "Container"
              type = "javax.sql.DataSource"
              driverClassName = "com.mysql.jdbc.Driver"
              url      = "jdbc:mysql://localhost/book"
              username = "username"
              password = "password">
    </Resource>
</Context>

3. 実行(複数パターン)

  1. 【実行】servlet(サーブレット)
  2. 【実行】DAO ~Beanを使わない~
  3. 【実行】DAO ~Beanを使用~

1. 【実行】servlet(サーブレット)

/src/sample/All.javaに作成する

All.java
package sample;

import java.io.*;
import java.sql.*;

import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import javax.sql.*;

/**
 * Servlet implementation class All
 */
@WebServlet("/All")
public class All extends HttpServlet {


    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        PrintWriter out = response.getWriter();

        try {
            // コネクション取得
            InitialContext ic = new InitialContext();
            DataSource ds = (DataSource) ic.lookup("java:/comp/env/jdbc/book");
            Connection con = ds.getConnection();

            // SQL文送信
            PreparedStatement st = con.prepareStatement("select * from product");
            // 実行&結果受け取り
            ResultSet rs = st.executeQuery();

            // データの表示
            while (rs.next()) {
                out.println(
                    rs.getInt("id")      + ":" + 
                    rs.getString("name") + ":" + 
                    rs.getInt("price")
                );
            }

            // データベース切断
            st.close();
            con.close();

        } catch (Exception e) {
            // 接続・SQL文エラー
            e.printStackTrace(out);

        } // try
    }

}

2. 【実行】DAO ~Beanを使わない~

DAO(Data Access Object)を作成!!!!( ^ω^ )
上記、1. 【実行】servlet(サーブレット)の内容をライブラリ化する

1 ) DAO.java を作成する(コネクション取得)
2 ) ProductList.java を作成する(DAO取得 & 処理 & 表示)

1 ) DAO.java を作成する(コネクション取得)

DAO.java
package dao;

import java.sql.Connection;

import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DAO {
    static DataSource ds;

    public Connection getConnection() throws Exception {

        // 初期コンテキスト構築
        InitialContext ic = new InitialContext();

        // DBの接続先情報を取得(context.xmlの内容)
        ds = (DataSource) ic.lookup("java:/comp/env/jdbc/book");

        return ds.getConnection();
    }
}

2 ) ProductList.java を作成する(DAO取得 & 処理 & 表示)

ProductList.java
package sample;

import dao.DAO;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet("/sample/productList")
public class ProductList extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        PrintWriter out = response.getWriter();

        try {
            // DB接続
            DAO dao = new DAO();
            Connection con = dao.getConnection();

            // SQL作成
            PreparedStatement st = con.prepareStatement("SELECT * FROM product");

            // SQL実行
            ResultSet rs = st.executeQuery();

            // データをセット
            while (rs.next()) {
                out.println(
                        rs.getInt("id")      + ":" + 
                        rs.getString("name") + ":" + 
                        rs.getInt("price")   + "<br>"
                    );
            }

            // 接続解除
            st.close();
            con.close();

        } catch (Exception e) {
            e.printStackTrace(out);
        }

    }
}

3. 【実行】DAO ~Beanを使用~

1 ) DAO.java を作成する(コネクション取得)
2 ) Product.java を作成する(Bean)
3 ) ProductDAO.java を作成する(DAO取得 & 処理)
4 ) ProductList2.java を作成する(ProductDAO取得 & 表示)

1 ) DAO.java を作成する(コネクション取得)

上記、2 ) 【実行】DAO ~Beanを使わない~と同じ為
!!!!! 割愛 !!!!!

2 ) Product.java を作成する(Bean)

Product.java
package bean;

public class Product implements java.io.Serializable {
    private int id;
    private String name;
    private int price;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

3 ) ProductDAO.java を作成する(DAO取得 & 処理)

ProductDAO.java

package dao;

import java.sql.*;
import java.util.*;
import bean.Product;

public class ProductDAO extends DAO {
    public List<Product> listAll() throws Exception {

        List<Product> list = new ArrayList<>();

        // DB接続
        Connection con = getConnection();

        // SQL作成
        PreparedStatement st = con.prepareStatement("SELECT * FROM product");

        // SQL実行
        ResultSet rs = st.executeQuery();

        // データをセット
        while (rs.next()) {
            Product p = new Product();
            p.setId(rs.getInt("id"));
            p.setName(rs.getString("name"));
            p.setPrice(rs.getInt("price"));

            list.add(p);
        }

        // 接続解除
        st.close();
        con.close();

        return list;
    }
}

4 ) ProductList2.java を作成する(ProductDAO取得 & 表示)

ProductList2.java
package sample;

import java.io.*;
import java.sql.*;
import java.util.List;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import javax.sql.*;
import bean.Product;
import dao.ProductDAO;

@WebServlet("/sample/productList2")
public class Search2 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        PrintWriter out = response.getWriter();

        try {
            ProductDAO dao = new ProductDAO();

            List<Product> list = dao.listAll();

            for (Product p : list) {
                out.println(
                        p.getId()    + ":" + 
                        p.getName()  + ":" + 
                        p.getPrice() + "<br>"
                );
            }

        } catch (Exception e) {
            e.printStackTrace(out);
        }

    }

}

参考サイト

※ めちゃくちゃ参考になった!!!
Java で MySQL に 接続する 方法
https://garafu.blogspot.com/2016/05/how-to-connect-mysql.html#con-svlt1

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10