支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


はじめに

データベースに指示を送り操作するものがSQLです。
Javaには、データベース操作専用のAPIがあります。それが、JDBC APIです。 Javaでデータベースにアクセスするアプリケーション開発に必要な JDBC の基本についてご紹介します。

以下の内容をご紹介します。



(1)JDBC

1-1 JDBCとは

JDBC(Java DataBase Connectivity)とは、Javaからデータベースにアクセスする場合に用いられる共通インターフェースです。
JDBCには、次のようなパッケージがあります。
  • java.sql パッケージ
  • データベースを操作する基本APIを提供。 java.sqlで提供されている主なクラス・インターフェースは、次のようなものがあります。
    java.sqlを実装したクラス
    インターフェース / クラス名 機能
    DriverManager クラス JDBCドライバを管理する
    Connection インターフェース データベースへの接続・切断を行う
    Statement インターフェース 標準的なSQL文を実行する
    ResultSet インターフェース データベースの結果セットを表すデータの表
  • javax.sql パッケージ
  • データベースアクセス時のサーバ側での処理を行う場合に用いるAPIを提供。

JDBCを実装したクラスをJDBCドライバといいます。
このJDBCドライバがJavaプログラムとデータベースを結び付けています。
使用するデータベースに合わせてJDBCを利用してください。 各JDBCドライバは、DBMS(データベース管理システム:Database Manegement System)の開発元よりJARファイルとして、提供されています。 尚、プログラムを実行する場合は、CLASSPATH環境変数にJARファイルのパスを登録してください。


1-2 データベース環境

今回使用するデータベースの環境及びテーブルは以下の通りです。
データベース環境
DBMS MySQL Community Server 8.0.22
JDBC ドライバ MySQL-Connector-J 8.0.22
JDBC ドライバタイプ タイプ4
JARファイル mysql-connector-java-8.0.22.jar

データベース接続環境
ユーザ名 root
パスワード forStudy
ホスト名 localhost
ポート番号 3306
データベース名 db_ex

テーブル:商品一覧
列名 データ型 制約
id INT NOT NULL , PRIMARY KEY
name VARCHAR(100) -
price INT -

id
INT
name
VARCHAR(100)
price
INT
1 ○○○小説 800
2 ABC資格 参考書 2500
3 ABC資格 問題集 2800
4 △△△技術書 4200
5 □□□漫画全巻 3200


(2)JDBC

一般的なデータベースに接続して処理する流れは、次の通りです。

//1)java.sql パッケージのインポート
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DatabaseEx {

	public static void main(String[] args) {
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;

		try {
		 //2)接続するデータベースを指定
		 String url = "jdbc:mysql://localhost:3306/db_ex?"
				+ "useUnicode=true&"
				+ "useJDBCCompliantTimezoneShift=true&"
				+ "useLegacyDatetimeCode=false&serverTimezone=UTC";

		 //3)データベースに接続
		 String user = "root";
		 String password = "forStudy";
		 con = DriverManager.getConnection(url, user, password);

		 //4)Statementの取得
		 stmt = con.createStatement();

		 //5)SQL文の実行
		 String sql = "SELECT * FROM 商品一覧";
		 rs = stmt.executeQuery(sql);

		 //6)結果の取得
		 while (rs.next()) {
			System.out.println("id : " + rs.getInt(1));
			System.out.println("name : " + rs.getString(2));
			System.out.println("price : " + rs.getInt(3) + "¥n");
		 }
		} catch (SQLException e1) {
		 e1.printStackTrace();
		} finally {
		  //7)接続のクローズ
		  try {
		   if(rs != null) { rs.close();}
		   if(stmt != null)  { stmt.close();}
		   if (con != null) { con.close(); }
		  } catch (SQLException e2) { e2.printStackTrace(); }
		}
	}
}
実行結果
id : 1
name : ○○○小説
price : 800

id : 2
name : ABC資格 参考書
price : 2500

id : 3
name : ABC資格 問題集
price : 2800

id : 4
name : △△△技術書
price : 4200

id : 5
name : □□□漫画全巻
price : 3200


2-1 データベース接続

1)java.sqlパッケージをのインポート
import java.sql.*;」としても良いです。
また、「Connection con = null;」、「Statement stmt = null;」、「ResultSet rs = null;」で各インターフェースの変数宣言を行っています。

2)接続するデータベースを指定
通信先のデータベースをデータベースを特定するJDBC URLを文字列で指定します。 URLは使用するデータベースによって異なります。
URLの構文は次の通りです。

jdbc:<subprotocol>://<subname>?<JDBC接続オプション>

jdbc:プロトコル。
<subprotocol>:JDBC ドライバ独自のプロトコル名。ドライバで異なる。
<subname>:データベースを特定するための情報。ホスト名、ポート番号、データベース名 等
?<JDBC接続オプション>:文字化け防止やタイムゾーン設定といったオプションを指定する。
3)データベースに接続
データベースへの接続は、DriverManager クラスgetConnection()メソッドを用いてConnection オブジェクトを取得します。Connection オブジェクト取得できなかった場合は、SQLException 例外がスローされます。
また、getConnection()メソッドは、2種類用意されています。
【getConnection()メソッド】
メソッド名 説明
static Connection getConnection(String url , String user , String password)
  throws SQLException
指定されたデータベースURLに
ユーザ名とパスワードを用いて接続する
static Connection getConnection(String url)
  throws SQLException
指定されたデータベースURLに接続する

2-2 SQL送信

4)Statementの取得
SQL文を実行するために、Connection インターフェースのcreateStatement()メソッドを用いてStatement オブジェクトを取得します。

5)SQL文の実行
SQL文の実行は、Statement インターフェースのメソッドを用います。実行するSQL文は、文字列で用意します。
Statement インターフェースには、実行するSQL文の違いによっていくつかのメソッドが用意されています。
【Statement インターフェースの主なメソッド】
メソッド名 戻り値 使用SQL文 説明
ResultSet executeQuery(String sql)
  throws SQLException
単一のResultSetオブジェクト SELECT文 指定されたSQL文を実行する
int executeUpdate(String sql)
  throws SQLException
INSERT文、UPDATE文、DELETE文→行数

DDL文(何も返さないSQL文)→0
INSERT文、UPDATE文、DELETE文、
SQL DDL文
指定されたSQL文を実行する

6)結果の取得
SELECT文を実施したので、検索結果がexecuteQuery()メソッドによりResultSetオブジェクトとして返されます。
以下の手順で行および列にアクセスします。
  • 行へのアクセス
  • next()メソッドにより、1行ずつ行にアクセスします。next()メソッドは、次に行が存在する場合にtrueを返し、行が存在しない場合にfalseを返します。 尚、next()メソッドが1回も呼び出されずにデータの取得を試みるとSQLException 例外がスローされます。

  • 列へのアクセス
  • getterメソッドの引数に列番号 or 列名を指定することで、データを取得します。SQLのデータ型に合わせてgetterメソッドが用意されています。
    列番号は、左から右に番号が振られ、最初の列番号は1です。
    【主なgetterメソッド】
    SQL型 getterメソッド名
    CHAR / VARCHAR getString()
    INTEGER / INT getInt()
    DOUBLE getDouble()
    DATE getDate()
    TIME getTime()

    【行および列へのアクセス】

2-3 データベース切断

7)接続のクローズ
全ての処理が終了したら、close()メソッドを用いてリソースを解放します。



まとめ

JDBC」についてご紹介しました。
お役に立てると幸いです。