DEV Community

programmingMonky
programmingMonky

Posted on

JDBCを利用してJavaからデータベースにアクセスする方法

本投稿ではJDBCを使ってJavaのプログラムからSQLの実行、実行結果の表示を行うことで、JDBCの使い方を説明します

前提としてまずはこちらの

https://dev.to/programmingmonky/postgresqlsql-3dja

記事の通りのデータベース、テーブルが作成されており、
データの投入とSQLの実行確認ができているものとします。

JDBCのダウンロード

https://jdbc.postgresql.org/download.html

こちらのサイトからJDBCをダウンロードします

jdbc

JDBCの追加先アプリケーションの作成

JDBCを追加するアプリケーションを作成します。

Eclipseを開き、ファイル>新規>Javaプロジェクトを選択

saku

適当な名前を付けてプロジェクトを作成してください

今回私はjdbcsampleとしました

jdbcsample

JDBCのビルドパスの追加

インストールしたJDBCを解凍し、Eclipseでビルドパスを追加してください

プロジェクト右クリック>ビルド・パス>外部アーカイブの追加 で解凍したJDBCを選択してください

追加

これでJDBCがプロジェクトに追加されました

追加されたJDBC

Javaのプログラム作成

ファイル>新規>クラスから新しくJavaのファイルを追加します。

名前にMainと付け、「完了」を押します。

作成したMainのファイルに以下のJavaのプログラムを張り付けます

package jdbcsample;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) throws Exception {

        try (
                Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/sample", // "jdbc:postgresql://<場所>:<ポート>/<データベース名>"
                        "postgres", //user
                        "postgres"); //password;
                Statement statement =    connection.createStatement();
                ResultSet resultSet = statement.executeQuery(

                        "select code,name_jp,region,\r\n" +
                        "count('1') over(partition by region) as num\r\n" +
                        "\r\n" +
                        "from m_country\r\n" +
                        "order by num"

                        );
                ){

            List<String> columns = new ArrayList<String>();

            ResultSetMetaData rsmd = resultSet.getMetaData();
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                columns.add(rsmd.getColumnName(i));
            }

            System.out.println(resultSet);

            while (resultSet.next()) {
                System.out.println("\ncount:" + resultSet.getRow());

                columns.stream().forEach((i)->{try {
                    System.out.println(i + ":" + resultSet.getString(i));
                } catch (SQLException e) {
                    e.printStackTrace();
                }});
            }


        }
    }

}

Enter fullscreen mode Exit fullscreen mode

プログラムの意味を一部解説すると

以下の部分でデータベースに接続しています

Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/sample", // "jdbc:postgresql://<場所>:<ポート>/<データベース名>"
    "postgres", //user
    "postgres"); //password;
Enter fullscreen mode Exit fullscreen mode

※ユーザー名、ポート、パスワードがなどが私の環境と違う場合、別のものを選択してください。

以下の部分でSQLを実行して結果を受け取っています

ResultSet resultSet = statement.executeQuery(
        "select code,name_jp,region,\r\n" +
        "count('1') over(partition by region) as num\r\n" +
        "\r\n" +
        "from m_country\r\n" +
        "order by num"

        );

Enter fullscreen mode Exit fullscreen mode

以下の部分で取得結果を表示する処理を実行しています。

while (resultSet.next()) {
    System.out.println("\ncount:" + resultSet.getRow());

    columns.stream().forEach((i)->{try {
        System.out.println(i + ":" + resultSet.getString(i));
    } catch (SQLException e) {
        e.printStackTrace();
    }});
}

Enter fullscreen mode Exit fullscreen mode

このプログラムを保存し、
パッケージエクスプローラでプロジェクト名を右クリックし

実行>Javaアプリケーション

をクリックしてください。

実行結果

IDEのコンソール欄にSQLを実行した結果が表示されています。

java

同じSQLを実行しているのでこの投稿の実行結果と一致しているはずです。

code name_jp region num
643 ロシア連邦 ロシア 1
010 南極 南極 2
470 マルタ 地中海地域 2
196 キプロス 地中海地域 2
074 ブーベ島 南極 2
666 サンピエール島・ミクロン島 北アメリカ 3
840 アメリカ合衆国 北アメリカ 3
124 カナダ 北アメリカ 3

以上がJDBCの使い方になります。

Top comments (0)