自分なりのまとめ
★☆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>