8
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】DB接続のプログラムのメモ

Posted at

データベースへ接続するプログラム

一言まとめ

スムーズにデータベース接続を行う手順まとめです。

【説明】

コードを見てDB接続の流れを見ていきます。
大まかな流れは以下です。

  1. Class.forName() でDB接続の準備
  2. 接続処理
  3. 切断処理

DB接続の準備

SQLのパッケージをインポートする

以下はjava.sqlパッケージ内のクラスです。

  • Connectionインタフェース
  • DriverManagerクラス

パッケージ宣言の後に以下を記述してインポートします。

// SQLのパッケージをインポート
import java.sql.Connection;
import java.sql.DriverManager;

DBに接続するための値をフィールドで定数化

これらは後々でDB接続に使う値になります。以下の理由から定数に設定しておくと使いやすい。

  • 基本的に滅多に変わることがない値のため、
  • 何度も同じ記述する手間がなくなる
  • コーディングのケアレスミスをなくす。
    // ドライバーのクラス名
    private static final String POSTGRES_DRIVER = "org.postgresql.Driver";
    // JDMC接続先情報
    private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/lesson_db";
    // ユーザー名
    private static final String USER = "ユーザー名";
    // パスワード
    private static final String PASS = "パスワード";

後に接続先の情報を入れるので、最初は null を与えておく。

Connection connection = null;

Class.forName()

JDBCドライバをロードします。データベースに接続する準備の記述。
Class.forName()メソッドにJDBCドライバ名を与えます。

// データベースに接続する準備。
// Class.forName()メソッドにJDBCドライバ名を与えJDBCドライバをロード
Class.forName(POSTGRES_DRIVER);

接続処理

DriverManager

DriverManagerクラスのgetConnection()メソッドを使用してデータベースへの接続を行います。
接続したいデータベースを指定するには、getConnection() メソッドに以下を入力します。

jdbc:postgresql://【ホスト名】/【データベース名】 【ユーザ名】 【パスワード】

ここで先程設定した定数を以下のように引数として与えることで、データベースを指定できます。

// 接続先の情報。引数:「JDMC接続先情報」,「ユーザー名」,「パスワード」
connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS);

例外処理と接続の切断

        try {
            // 接続処理...

            // forName()で例外発生
        } catch (ClassNotFoundException e) {
            e.printStackTrace();

            // getConnection()で例外発生
        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
            try {
                if (connection != null) {
                    // データベースを切断
                    connection.close();
                }

            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

connection.close()

SQL文がデータベース上に滞留し処理が進まなくなり、エラーが起きたりたりするため、DBに接続したら、必ず 切断 するための記述をします。
データベースから切断するためにclose()メソッドを実行します。
確実に切断を行うには、finally句に記述し、
「Connectionが接続されているか(nullでないか)の判定」を行うよう記述。

【まとめ】

これら一連の流れを書いたコードが以下になります。

package about_create_JDBC;

// SQLのパッケージをインポート
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class AccessDB {

    // ドライバーのクラス名
    private static final String POSTGRES_DRIVER = "org.postgresql.Driver";
    // JDMC接続先情報 localhost:5432 は人によって値が違うことがあります。
    private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/pokedex";
    // ユーザー名
    private static final String USER = "postgres";
    // パスワード
    private static final String PASS = "postgres";

    public static void main(String[] args) {

        Connection connection = null;

        try {
            // データベースに接続する準備。
            // Class.forName()メソッドにJDBCドライバ名を与えJDBCドライバをロード
            Class.forName(POSTGRES_DRIVER);

            // 接続先の情報。引数:「JDMC接続先情報」,「ユーザー名」,「パスワード」
            connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS);

            // forName()で例外発生
        } catch (ClassNotFoundException e) {
            e.printStackTrace();

            // getConnection()で例外発生
        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
            try {
                if (connection != null) {
                    // データベースを切断
                    connection.close();
                }

            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

参考文献・記事

8
21
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
8
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?