0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLとデータベースの連携 

Last updated at Posted at 2024-09-02

自分なりのまとめ
★☆MySQLを使用してます☆★

JDBC

Java Datebase Connectivityの略
Javaプログラムとデータベースを接続するためのAPI。Javaプログラムからデータベースに対してSQLクリエを実行したり、データを操作ができる。

主な機能

①データベース接続
Javaプログラムからデータベースに接続し、操作を行う為の接続オブジェクト(Connection)を作成

②SQLクリエの実行
SQLクリエ(SELECT,INSERT,UPDATE,DELETEなど)を実行するための  Statement,PreparedStatement,CallableStatement オブジェクトを提供

③結果セットの処理
SELECTクリエの結果として得られるデータを処理するためのResultSetオブジェクトを提供

④トランザクション管理
データベース内でのトランザクション(複数のSQL操作を1つの単位として扱う)の制御を行う。commit()rollback()を使ってトランザクションを確定や取り消しなどができる。

JDBC URL形式

jdbc:mysql://サーバーのホスト名またはIPアドレス/データベース名;

jdbc:mysql://
JDBCのプロトルコを指定し、MySQLに接続することを示す

サーバーのホスト名またはIPアドレス
MySQLサーバーが稼働しているマシンのホスト名(例:localhost)やIPアドレス(例:192.168.1.100)を指定

/データベース名
接続したい特定のデータベースの名前を指定。MySQLサーバーに複数のデータベースが存在する場合、ここで指定したデータベースに接続される

追加の接続オブション
追加の接続オプションを指定する場合は、クエリパラメータ形式で追加できる
例: ?serverTimezone=Asia/Tokyo
MySQLサーバーのタイムゾーンが日本標準時(JST)であることを指定

jdbc:mysql://localhost/test?serverTimezone=Asia/Tokyo";
ローカルホスト上のtestデータベースに接続し、その接続のタイムゾーンを日本標準時に設定している。

接続してみた

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; 


@WebServlet("/DBAccessServlet")
public class DBAccessServlet extends HttpServlet{
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
		doPost(request,response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
		try {
			// JDBC ドライバのクラスをロードする
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			// データベースの接続 URLを設定する(○○○○の部分は使用するデータベース名)
			String url = "jdbc:mysql://localhost/○○○○?serverTimezone=Asia/Tokyo";
			//ユーザー名、パスワードを設定する(○○○○の部分は自分の設定したパスワード)
			Connection connection = DriverManager.getConnection(url, "root", "○○○○");
			
			// データベース接続成功メッセージをリクエスト属性として設定する
            request.setAttribute("message", "データベース接続しました");
		   
		    // データベース接続を閉じる
			connection.close();
			}  catch(Exception e) {
		   // 例外が発生した場合にスタックトレースを出力する
		   e.printStackTrace();
		} 
		
		// JSP ページにリクエストをフォワードする
		RequestDispatcher dispatch = request.getRequestDispatcher("/jsp/dbAccess.jsp");
		dispatch.forward(request, response);
	}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv ="Content-Type" content="text/html; charset= UTF-8"> 
  <title>表示</title>
 </head>
 <body> 
  <p>${message}</p>
 </body>
</html>

データを検索して表示させてみた

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/DBAccessTestServlet")
public class DBAccessTestServlet extends HttpServlet {
    
    // GETリクエストをPOSTリクエストにフォワードする
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    
    // POSTリクエストを処理するメソッド
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            // MySQLのJDBCドライバをロード
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            // データベース接続URL、ユーザー名、パスワードを指定して、MySQLサーバーに接続
            String url = "jdbc:mysql://localhost/test1?serverTimezone=Asia/Tokyo"; 
            Connection connection = DriverManager.getConnection(url, "root", "sakanae41");
            
            // SQLクエリを定義。名前が「りんご」の商品の価格を取得する
            String sql = "SELECT price FROM foods WHERE name = ?";
            String price = null;
            
            // SQLクエリを準備し、プレースホルダーに値を設定
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setString(1, "りんご");
            
            // クエリを実行し、結果セットを取得
            ResultSet rs = ps.executeQuery();
            
            // 結果セットから価格を取得し、変数に格納
            while(rs.next()) {
                price = rs.getString("price");
            }
            
            // 取得した価格をリクエスト属性として設定
            request.setAttribute("message", "りんごの金額は" + price + "円です");
            
            // データベース接続をクローズ
            connection.close();
        } catch(Exception e) {
            // 例外発生時にエラーメッセージをリクエスト属性に設定し、例外をログ出力
            request.setAttribute("message", "エラーが発生しました: " + e.getMessage());
            e.printStackTrace();
        }
        
        // JSPページにリクエストをフォワード
        RequestDispatcher dispatch = request.getRequestDispatcher("/jsp/dbAccess.jsp");
        dispatch.forward(request, response);
    }
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv ="Content-Type" content="text/html; charset= UTF-8"> 
  <title>表示</title>
 </head>
 <body> 
   <%= (String)request.getAttribute("message") %>
 </body>
</html>
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?