クイックスタート: Azure Database for PostgreSQL で Java と JDBC を使用するQuickstart: Use Java and JDBC with Azure Database for PostgreSQL

このトピックでは、Java と JDBC を使って Azure Database for PostgreSQL に情報を格納および取得するサンプル アプリケーションを作成する方法を説明します。This topic demonstrates creating a sample application that uses Java and JDBC to store and retrieve information in Azure Database for PostgreSQL.

JDBC は、従来のリレーショナル データベースに接続するための標準の Java API です。JDBC is the standard Java API to connect to traditional relational databases.

前提条件Prerequisites

作業環境を準備するPrepare the working environment

入力ミスを少なくし、特定のニーズに応じて以下の構成をカスタマイズしやすくするために、ここでは環境変数を使用します。We are going to use environment variables to limit typing mistakes, and to make it easier for you to customize the following configuration for your specific needs.

次のコマンドを使用して環境変数を設定します。Set up those environment variables by using the following commands:

AZ_RESOURCE_GROUP=database-workshop
AZ_DATABASE_NAME=<YOUR_DATABASE_NAME>
AZ_LOCATION=<YOUR_AZURE_REGION>
AZ_POSTGRESQL_USERNAME=demo
AZ_POSTGRESQL_PASSWORD=<YOUR_POSTGRESQL_PASSWORD>
AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>

プレースホルダーは、この記事全体で使用される次の値に置き換えてください。Replace the placeholders with the following values, which are used throughout this article:

  • <YOUR_DATABASE_NAME>:PostgreSQL サーバーの名前。<YOUR_DATABASE_NAME>: The name of your PostgreSQL server. Azure 全体で一意である必要があります。It should be unique across Azure.
  • <YOUR_AZURE_REGION>:使用する Azure リージョン。<YOUR_AZURE_REGION>: The Azure region you'll use. 既定で eastus を使用できますが、居住地に近いリージョンを構成することをお勧めします。You can use eastus by default, but we recommend that you configure a region closer to where you live. az account list-locations」を入力すると、使用可能なリージョンの完全な一覧を表示できます。You can have the full list of available regions by entering az account list-locations.
  • <YOUR_POSTGRESQL_PASSWORD>:PostgreSQL データベース サーバーのパスワード。<YOUR_POSTGRESQL_PASSWORD>: The password of your PostgreSQL database server. パスワードは 8 文字以上にする必要があります。That password should have a minimum of eight characters. これには、英大文字、英小文字、数字 (0 から 9)、英数字以外の文字 (!、$、#、% など) のうち、3 つのカテゴリの文字が含まれている必要があります。The characters should be from three of the following categories: English uppercase letters, English lowercase letters, numbers (0-9), and non-alphanumeric characters (!, $, #, %, and so on).
  • <YOUR_LOCAL_IP_ADDRESS>:ローカル コンピューターの IP アドレス。そこから、Java アプリケーションを実行します。<YOUR_LOCAL_IP_ADDRESS>: The IP address of your local computer, from which you'll run your Java application. これを確認する簡単な方法は、ブラウザーで whatismyip.akamai.comにアクセスすることです。One convenient way to find it is to point your browser to whatismyip.akamai.com.

次に、次のコマンドを使用し、リソース グループを作成します。Next, create a resource group by using the following command:

az group create \
    --name $AZ_RESOURCE_GROUP \
    --location $AZ_LOCATION \
  	| jq

注意

jq ユーティリティを使用し、JSON データを表示し、より読みやすくします。We use the jq utility to display JSON data and make it more readable. このユーティリティは既定で Azure Cloud Shell にインストールされます。This utility is installed by default on Azure Cloud Shell. このツールを使用しない場合は、使用するすべてのコマンドの | jq の部分を削除しても問題ありません。If you don't like that utility, you can safely remove the | jq part of all the commands we'll use.

Azure Database for PostgreSQL インスタンスを作成するCreate an Azure Database for PostgreSQL instance

最初に作成するのは、マネージド PostgreSQL サーバーです。The first thing we'll create is a managed PostgreSQL server.

注意

PostgreSQL サーバーの作成に関する詳細については、Azure portal を使用した Azure Database for PostgreSQL サーバーの作成に関するページを参照してください。You can read more detailed information about creating PostgreSQL servers in Create an Azure Database for PostgreSQL server by using the Azure portal.

Azure Cloud Shell で次のコマンドを実行します。In Azure Cloud Shell, run the following command:

az postgres server create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_NAME \
    --location $AZ_LOCATION \
    --sku-name B_Gen5_1 \
    --storage-size 5120 \
    --admin-user $AZ_POSTGRESQL_USERNAME \
    --admin-password $AZ_POSTGRESQL_PASSWORD \
  	| jq

このコマンドにより、小規模な PostgreSQL サーバーが作成されます。This command creates a small PostgreSQL server.

PostgreSQL サーバーのファイアウォール規則を構成するConfigure a firewall rule for your PostgreSQL server

Azure Database for PostgreSQL インスタンスは、既定でセキュリティ保護されています。Azure Database for PostgreSQL instances are secured by default. 受信接続を一切許可しないファイアウォールがあります。They have a firewall that doesn't allow any incoming connection. データベースを使用できるようにするには、データベース サーバーにアクセスするためのローカル IP アドレスを許可するファイアウォール規則を追加する必要があります。To be able to use your database, you need to add a firewall rule that will allow the local IP address to access the database server.

この記事の冒頭でローカル IP アドレスを構成したので、次のコマンドを実行してサーバーのファイアウォールを開くことができます。Because you configured your local IP address at the beginning of this article, you can open the server's firewall by running the following command:

az postgres server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_NAME-database-allow-local-ip \
    --server $AZ_DATABASE_NAME \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS \
  	| jq

PostgreSQL データベースを構成するConfigure a PostgreSQL database

先ほど作成した PostgreSQL サーバーは空です。The PostgreSQL server that you created earlier is empty. Java アプリケーションで使用できるデータベースはありません。It doesn't have any database that you can use with the Java application. 次のコマンドを使用し、demo という名前の新しいデータベースを作成します。Create a new database called demo by using the following command:

az postgres db create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name demo \
    --server-name $AZ_DATABASE_NAME \
  	| jq

新しい Java プロジェクトを作成するCreate a new Java project

任意の IDE を使用して新しい Java プロジェクトを作成し、そのルート ディレクトリに pom.xml ファイルを追加します。Using your favorite IDE, create a new Java project, and add a pom.xml file in its root directory:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.12</version>
        </dependency>
    </dependencies>
</project>

このファイルは、以下を使用するようにプロジェクトを構成する Apache Maven です。This file is an Apache Maven that configures our project to use:

  • Java 8Java 8
  • 最近の Java 用 PostgreSQL ドライバーA recent PostgreSQL driver for Java

Azure Database for PostgreSQL に接続するための構成ファイルを準備するPrepare a configuration file to connect to Azure Database for PostgreSQL

src/main/resources/application.properties ファイルを作成して、以下を追加します。Create a src/main/resources/application.properties file, and add:

url=jdbc:postgresql://$AZ_DATABASE_NAME.postgres.database.azure.com:5432/demo?ssl=true&sslmode=require
user=demo@$AZ_DATABASE_NAME
password=$AZ_POSTGRESQL_PASSWORD
  • 2 つの $AZ_DATABASE_NAME 変数を、この記事の冒頭で構成した値に置き換えます。Replace the two $AZ_DATABASE_NAME variables with the value that you configured at the beginning of this article.
  • $AZ_POSTGRESQL_PASSWORD 変数を、この記事の冒頭で構成した値で置き換えます。Replace the $AZ_POSTGRESQL_PASSWORD variable with the value that you configured at the beginning of this article.

注意

構成プロパティ url?ssl=true&sslmode=require を追加して、データベースへの接続時に TLS (Transport Layer Security) を使用するように JDBC ドライバーに指示します。We append ?ssl=true&sslmode=require to the configuration property url, to tell the JDBC driver to use TLS (Transport Layer Security) when connecting to the database. Azure Database for PostgreSQL で TLS を使用することは必須であり、優れたセキュリティ慣行です。It is mandatory to use TLS with Azure Database for PostgreSQL, and it is a good security practice.

データベース スキーマを生成するための SQL ファイルを作成するCreate an SQL file to generate the database schema

データベース スキーマを作成するためには、src/main/resources/schema.sql ファイルを使用します。We will use a src/main/resources/schema.sql file in order to create a database schema. このファイルを次の内容で作成します。Create that file, with the following content:

DROP TABLE IF EXISTS todo;
CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);

アプリケーションをコーディングするCode the application

データベースに接続するConnect to the database

次に、JDBC を使用して PostgreSQL サーバーにデータを格納および取得する Java コードを追加します。Next, add the Java code that will use JDBC to store and retrieve data from your PostgreSQL server.

次のコードを含んだ src/main/java/DemoApplication.java ファイルを作成します。Create a src/main/java/DemoApplication.java file, that contains:

package com.example.demo;

import java.sql.*;
import java.util.*;
import java.util.logging.Logger;

public class DemoApplication {

    private static final Logger log;

    static {
        System.setProperty("java.util.logging.SimpleFormatter.format", "[%4$-7s] %5$s %n");
        log =Logger.getLogger(DemoApplication.class.getName());
    }

    public static void main(String[] args) throws Exception {
        log.info("Loading application properties");
        Properties properties = new Properties();
        properties.load(DemoApplication.class.getClassLoader().getResourceAsStream("application.properties"));

        log.info("Connecting to the database");
        Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties);
        log.info("Database connection test: " + connection.getCatalog());

        log.info("Create database schema");
        Scanner scanner = new Scanner(DemoApplication.class.getClassLoader().getResourceAsStream("schema.sql"));
        Statement statement = connection.createStatement();
        while (scanner.hasNextLine()) {
            statement.execute(scanner.nextLine());
        }

        /*
        Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
        insertData(todo, connection);
        todo = readData(connection);
        todo.setDetails("congratulations, you have updated data!");
        updateData(todo, connection);
        deleteData(todo, connection);
        */

        log.info("Closing database connection");
        connection.close();
    }
}

この Java コードは、PostgreSQL サーバーに接続するため、またデータを格納するスキーマを作成するために、先ほど作成した application.properties ファイルと schema.sql ファイルを使用します。This Java code will use the application.properties and the schema.sql files that we created earlier, in order to connect to the PostgreSQL server and create a schema that will store our data.

このファイルを見るとわかるように、データの挿入、読み取り、更新、削除のためのメソッドがコメント化されています。これらのメソッドのコードは、この記事の中で後から作成します。それぞれのメソッドが完成したら都度、コメント解除することができます。In this file, you can see that we commented methods to insert, read, update and delete data: we will code those methods in the rest of this article, and you will be able to uncomment them one after each other.

注意

データベースの資格情報は、application.properties ファイルの user プロパティと password プロパティに格納されます。The database credentials are stored in the user and password properties of the application.properties file. プロパティ ファイルは引数として渡されるため、これらの資格情報は DriverManager.getConnection(properties.getProperty("url"), properties); を実行するときに使用されます。Those credentials are used when executing DriverManager.getConnection(properties.getProperty("url"), properties);, as the properties file is passed as an argument.

以後、このメイン クラスは、次の任意のツールを使用して実行することができます。You can now execute this main class with your favorite tool:

  • IDE を使用する場合: DemoApplication クラスを右クリックして実行します。Using your IDE, you should be able to right-click on the DemoApplication class and execute it.
  • Maven を使用する場合: mvn exec:java -Dexec.mainClass="com.example.demo.DemoApplication" を実行することによってアプリケーションを実行できます。Using Maven, you can run the application by executing: mvn exec:java -Dexec.mainClass="com.example.demo.DemoApplication".

次のコンソール ログが示すように、このアプリケーションは、Azure Database for PostgreSQL に接続してデータベース スキーマを作成した後、接続を閉じます。The application should connect to the Azure Database for PostgreSQL, create a database schema, and then close the connection, as you should see in the console logs:

[INFO   ] Loading application properties 
[INFO   ] Connecting to the database 
[INFO   ] Database connection test: demo 
[INFO   ] Create database schema 
[INFO   ] Closing database connection 

ドメイン クラスを作成するCreate a domain class

DemoApplication クラスの横に新しい Todo Java クラスを作成し、以下のコードを追加します。Create a new Todo Java class, next to the DemoApplication class, and add the following code:

package com.example.demo;

public class Todo {

    private Long id;
    private String description;
    private String details;
    private boolean done;

    public Todo() {
    }

    public Todo(Long id, String description, String details, boolean done) {
        this.id = id;
        this.description = description;
        this.details = details;
        this.done = done;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getDetails() {
        return details;
    }

    public void setDetails(String details) {
        this.details = details;
    }

    public boolean isDone() {
        return done;
    }

    public void setDone(boolean done) {
        this.done = done;
    }

    @Override
    public String toString() {
        return "Todo{" +
                "id=" + id +
                ", description='" + description + '\'' +
                ", details='" + details + '\'' +
                ", done=" + done +
                '}';
    }
}

このクラスは、schema.sql スクリプトを実行する際に作成した todo テーブルにマップされるドメイン モデルです。This class is a domain model mapped on the todo table that you created when executing the schema.sql script.

Azure Database for PostgreSQL にデータを挿入するInsert data into Azure Database for PostgreSQL

src/main/java/DemoApplication.java ファイルの main メソッドの後に、データベースにデータを挿入するための次のメソッドを追加します。In the src/main/java/DemoApplication.java file, after the main method, add the following method to insert data into the database:

private static void insertData(Todo todo, Connection connection) throws SQLException {
    log.info("Insert data");
    PreparedStatement insertStatement = connection
            .prepareStatement("INSERT INTO todo (id, description, details, done) VALUES (?, ?, ?, ?);");

    insertStatement.setLong(1, todo.getId());
    insertStatement.setString(2, todo.getDescription());
    insertStatement.setString(3, todo.getDetails());
    insertStatement.setBoolean(4, todo.isDone());
    insertStatement.executeUpdate();
}

これで、main メソッドの次の 2 つの行のコメントを解除できます。You can now uncomment the two following lines in the main method:

Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
insertData(todo, connection);

メイン クラスを実行すると、次の出力が生成されるはずです。Executing the main class should now produce the following output:

[INFO   ] Loading application properties 
[INFO   ] Connecting to the database 
[INFO   ] Database connection test: demo 
[INFO   ] Create database schema 
[INFO   ] Insert data 
[INFO   ] Closing database connection

Azure Database for PostgreSQL からのデータの読み取りReading data from Azure Database for PostgreSQL

先ほど挿入したデータを読み取って、コードが正しく動作することを確認しましょう。Let's read the data previously inserted, to validate that our code works correctly.

src/main/java/DemoApplication.java ファイルの insertData メソッドの後に、データベースからデータを読み取るための次のメソッドを追加します。In the src/main/java/DemoApplication.java file, after the insertData method, add the following method to read data from the database:

private static Todo readData(Connection connection) throws SQLException {
    log.info("Read data");
    PreparedStatement readStatement = connection.prepareStatement("SELECT * FROM todo;");
    ResultSet resultSet = readStatement.executeQuery();
    if (!resultSet.next()) {
        log.info("There is no data in the database!");
        return null;
    }
    Todo todo = new Todo();
    todo.setId(resultSet.getLong("id"));
    todo.setDescription(resultSet.getString("description"));
    todo.setDetails(resultSet.getString("details"));
    todo.setDone(resultSet.getBoolean("done"));
    log.info("Data read from the database: " + todo.toString());
    return todo;
}

これで、main メソッドの次の行のコメントを解除できます。You can now uncomment the following line in the main method:

todo = readData(connection);

メイン クラスを実行すると、次の出力が生成されるはずです。Executing the main class should now produce the following output:

[INFO   ] Loading application properties 
[INFO   ] Connecting to the database 
[INFO   ] Database connection test: demo 
[INFO   ] Create database schema 
[INFO   ] Insert data 
[INFO   ] Read data 
[INFO   ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true} 
[INFO   ] Closing database connection 

Azure Database for PostgreSQL のデータの更新Updating data in Azure Database for PostgreSQL

先ほど挿入したデータを更新しましょう。Let's update the data we previously inserted.

引き続き src/main/java/DemoApplication.java ファイルの readData メソッドの後に、データベース内のデータを更新するための次のメソッドを追加します。Still in the src/main/java/DemoApplication.java file, after the readData method, add the following method to update data inside the database:

private static void updateData(Todo todo, Connection connection) throws SQLException {
    log.info("Update data");
    PreparedStatement updateStatement = connection
            .prepareStatement("UPDATE todo SET description = ?, details = ?, done = ? WHERE id = ?;");

    updateStatement.setString(1, todo.getDescription());
    updateStatement.setString(2, todo.getDetails());
    updateStatement.setBoolean(3, todo.isDone());
    updateStatement.setLong(4, todo.getId());
    updateStatement.executeUpdate();
    readData(connection);
}

これで、main メソッドの次の 2 つの行のコメントを解除できます。You can now uncomment the two following lines in the main method:

todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);

メイン クラスを実行すると、次の出力が生成されるはずです。Executing the main class should now produce the following output:

[INFO   ] Loading application properties 
[INFO   ] Connecting to the database 
[INFO   ] Database connection test: demo 
[INFO   ] Create database schema 
[INFO   ] Insert data 
[INFO   ] Read data 
[INFO   ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true} 
[INFO   ] Update data 
[INFO   ] Read data 
[INFO   ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true} 
[INFO   ] Closing database connection 

Azure Database for PostgreSQL のデータの削除Deleting data in Azure Database for PostgreSQL

最後に、先ほど挿入したデータを削除しましょう。Finally, let's delete the data we previously inserted.

引き続き src/main/java/DemoApplication.java ファイルの updateData メソッドの後に、データベース内のデータを削除するための次のメソッドを追加します。Still in the src/main/java/DemoApplication.java file, after the updateData method, add the following method to delete data inside the database:

private static void deleteData(Todo todo, Connection connection) throws SQLException {
    log.info("Delete data");
    PreparedStatement deleteStatement = connection.prepareStatement("DELETE FROM todo WHERE id = ?;");
    deleteStatement.setLong(1, todo.getId());
    deleteStatement.executeUpdate();
    readData(connection);
}

これで、main メソッドの次の行のコメントを解除できます。You can now uncomment the following line in the main method:

deleteData(todo, connection);

メイン クラスを実行すると、次の出力が生成されるはずです。Executing the main class should now produce the following output:

[INFO   ] Loading application properties 
[INFO   ] Connecting to the database 
[INFO   ] Database connection test: demo 
[INFO   ] Create database schema 
[INFO   ] Insert data 
[INFO   ] Read data 
[INFO   ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true} 
[INFO   ] Update data 
[INFO   ] Read data 
[INFO   ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true} 
[INFO   ] Delete data 
[INFO   ] Read data 
[INFO   ] There is no data in the database! 
[INFO   ] Closing database connection 

リソースをクリーンアップするClean up resources

お疲れさまでした。Congratulations! JDBC を使用して Azure Database for PostgreSQL にデータを格納および取得する Java アプリケーションを作成しました。You've created a Java application that uses JDBC to store and retrieve data from Azure Database for PostgreSQL.

このクイックスタートで使用したすべてのリソースをクリーンアップするには、次のコマンドを使用してリソース グループを削除します。To clean up all resources used during this quickstart, delete the resource group using the following command:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

次のステップNext steps