Azure Database for MySQL: Java を使った接続とデータの照会Azure Database for MySQL: Use Java to connect and query data

このクイックスタートでは、Java アプリケーションを使用して Azure Database for MySQL および JDBC ドライバー MySQL Connector/J に接続する方法を紹介します。This quickstart demonstrates how to connect to an Azure Database for MySQL by using a Java application and the JDBC driver MySQL Connector/J. ここでは、SQL ステートメントを使用してデータベース内のデータを照会、挿入、更新、削除する方法を説明します。It shows how to use SQL statements to query, insert, update, and delete data in the database. この記事では、Java を使用した開発には慣れているものの、Azure Database for MySQL の使用は初めてであるユーザーを想定しています。This article assumes that you are familiar with developing using Java and that you are new to working with Azure Database for MySQL.

MySQL コネクタのサンプル ページには他の例やサンプル コードが豊富にあります。There are numerous other examples and sample code at the MySQL Connector examples page.

前提条件Prerequisites

  1. このクイックスタートでは、次のいずれかのガイドで作成されたリソースを出発点として使用します。This quickstart uses the resources created in either of these guides as a starting point:

  2. アプリケーションが正常に接続できるよう、ファイアウォールが開き、SSL 設定が調整された状態で Azure Database for MySQL 接続のセキュリティが構成されていることを確認する。Ensure your Azure Database for MySQL connection security is configured with the firewall opened and SSL settings adjusted for your application to connect successfully.

  3. 次のいずれかの方法を使用して、MySQL Connector/J コネクタを取得します。Obtain the MySQL Connector/J connector using one of the following approaches:

    • Maven パッケージ mysql-connector-java を使用して、mysql dependency をプロジェクトの POM ファイルに含めます。Use the Maven package mysql-connector-java to include the mysql dependency in the POM file for your project.
    • JDBC ドライバー MySQL Connector/J をダウンロードし、JDBC jar ファイル (たとえば mysql-connector-java-5.1.42-bin.jar) をアプリケーションのクラス パスに含めます。Download the JDBC driver MySQL Connector/J and include the JDBC jar file (for example mysql-connector-java-5.1.42-bin.jar) into your application classpath. クラス パスで問題が発生した場合は、クラス パスの詳細 (Apache TomcatJava SE など) について環境のドキュメントを参照してください。If you have trouble with classpaths, consult your environment's documentation for class path specifics, such as Apache Tomcat or Java SE

接続情報の取得Get connection information

Azure Database for MySQL に接続するために必要な接続情報を取得します。Get the connection information needed to connect to the Azure Database for MySQL. 完全修飾サーバー名とログイン資格情報が必要です。You need the fully qualified server name and login credentials.

  1. Azure Portal にログインします。Log in to the Azure portal.
  2. Azure Portal の左側のメニューにある [すべてのリソース] をクリックし、作成したサーバー (例: mydemoserver) を検索します。From the left-hand menu in Azure portal, click All resources, and then search for the server you have created (such as mydemoserver).
  3. サーバー名をクリックします。Click the server name.
  4. サーバーの [概要] パネルから、[サーバー名][サーバー管理者ログイン名] を書き留めます。From the server's Overview panel, make a note of the Server name and Server admin login name. パスワードを忘れた場合も、このパネルからパスワードをリセットすることができます。If you forget your password, you can also reset the password from this panel. Azure Database for MySQL サーバー名Azure Database for MySQL server name

接続、テーブルの作成、データの挿入Connect, create table, and insert data

接続し、INSERT SQL ステートメントが含まれた関数を使用してデータを読み込むには、次のコードを使用します。Use the following code to connect and load the data using the function with an INSERT SQL statement. getConnection() メソッドは MySQL への接続に使用されます。The getConnection() method is used to connect to MySQL. createStatement() メソッドと execute() メソッドは、テーブルの削除と作成に使用されます。Methods createStatement() and execute() are used to drop and create the table. prepareStatement オブジェクトは、パラメーター値をバインドする setString() および setInt() と共に、挿入コマンドの作成に使用されます。The prepareStatement object is used to build the insert commands, with setString() and setInt() to bind the parameter values. executeUpdate() メソッドは、パラメーターの各セットに対してコマンドを実行して、値を挿入します。Method executeUpdate() runs the command for each set of parameters to insert the values.

host、database、user、password の各パラメーターは、独自のサーバーとデータベースの作成時に指定した値に置き換えてください。Replace the host, database, user, and password parameters with the values that you specified when you created your own server and database.

import java.sql.*;
import java.util.Properties;

public class CreateTableInsertRows {

    public static void main (String[] args)  throws Exception
    {
        // Initialize connection variables. 
        String host = "mydemoserver.mysql.database.azure.com";
        String database = "quickstartdb";
        String user = "myadmin@mydemoserver";
        String password = "<server_admin_password>";

        // check that the driver is installed
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch (ClassNotFoundException e)
        {
            throw new ClassNotFoundException("MySQL JDBC driver NOT detected in library path.", e);
        }

        System.out.println("MySQL JDBC driver detected in library path.");

        Connection connection = null;

        // Initialize connection object
        try
        {
            String url = String.format("jdbc:mysql://%s/%s", host, database);

            // Set connection properties.
            Properties properties = new Properties();
            properties.setProperty("user", user);
            properties.setProperty("password", password);
            properties.setProperty("useSSL", "true");
            properties.setProperty("verifyServerCertificate", "true");
            properties.setProperty("requireSSL", "false");

            // get connection
            connection = DriverManager.getConnection(url, properties);
        }
        catch (SQLException e)
        {
            throw new SQLException("Failed to create connection to database.", e);
        }
        if (connection != null) 
        { 
            System.out.println("Successfully created connection to database.");
        
            // Perform some SQL queries over the connection.
            try
            {
                // Drop previous table of same name if one exists.
                Statement statement = connection.createStatement();
                statement.execute("DROP TABLE IF EXISTS inventory;");
                System.out.println("Finished dropping table (if existed).");
    
                // Create table.
                statement.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);");
                System.out.println("Created table.");
                
                // Insert some data into table.
                int nRowsInserted = 0;
                PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO inventory (name, quantity) VALUES (?, ?);");
                preparedStatement.setString(1, "banana");
                preparedStatement.setInt(2, 150);
                nRowsInserted += preparedStatement.executeUpdate();

                preparedStatement.setString(1, "orange");
                preparedStatement.setInt(2, 154);
                nRowsInserted += preparedStatement.executeUpdate();

                preparedStatement.setString(1, "apple");
                preparedStatement.setInt(2, 100);
                nRowsInserted += preparedStatement.executeUpdate();
                System.out.println(String.format("Inserted %d row(s) of data.", nRowsInserted));
    
                // NOTE No need to commit all changes to database, as auto-commit is enabled by default.
    
            }
            catch (SQLException e)
            {
                throw new SQLException("Encountered an error when executing given sql statement.", e);
            }       
        }
        else {
            System.out.println("Failed to create connection to database.");
        }
        System.out.println("Execution finished.");
    }
}

データの読み取りRead data

SELECT SQL ステートメントを使用してデータを読み取るには、次のコードを使用します。Use the following code to read the data with a SELECT SQL statement. getConnection() メソッドは MySQL への接続に使用されます。The getConnection() method is used to connect to MySQL. createStatement() メソッドと executeQuery() メソッドは、接続と SELECT ステートメントの実行に使用されます。The methods createStatement() and executeQuery() are used to connect and run the select statement. 結果は、ResultSet オブジェクトを使用して処理されます。The results are processed using a ResultSet object.

host、database、user、password の各パラメーターは、独自のサーバーとデータベースの作成時に指定した値に置き換えてください。Replace the host, database, user, and password parameters with the values that you specified when you created your own server and database.

import java.sql.*;
import java.util.Properties;

public class ReadTable {

    public static void main (String[] args)  throws Exception
    {
        // Initialize connection variables.
        String host = "mydemoserver.mysql.database.azure.com";
        String database = "quickstartdb";
        String user = "myadmin@mydemoserver";
        String password = "<server_admin_password>";

        // check that the driver is installed
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch (ClassNotFoundException e)
        {
            throw new ClassNotFoundException("MySQL JDBC driver NOT detected in library path.", e);
        }

        System.out.println("MySQL JDBC driver detected in library path.");

        Connection connection = null;

        // Initialize connection object
        try
        {
            String url = String.format("jdbc:mysql://%s/%s", host, database);

            // Set connection properties.
            Properties properties = new Properties();
            properties.setProperty("user", user);
            properties.setProperty("password", password);
            properties.setProperty("useSSL", "true");
            properties.setProperty("verifyServerCertificate", "true");
            properties.setProperty("requireSSL", "false");
            
            // get connection
            connection = DriverManager.getConnection(url, properties);
        }
        catch (SQLException e)
        {
            throw new SQLException("Failed to create connection to database", e);
        }
        if (connection != null) 
        { 
            System.out.println("Successfully created connection to database.");
        
            // Perform some SQL queries over the connection.
            try
            {
    
                Statement statement = connection.createStatement();
                ResultSet results = statement.executeQuery("SELECT * from inventory;");
                while (results.next())
                {
                    String outputString = 
                        String.format(
                            "Data row = (%s, %s, %s)",
                            results.getString(1),
                            results.getString(2),
                            results.getString(3));
                    System.out.println(outputString);
                }
            }
            catch (SQLException e)
            {
                throw new SQLException("Encountered an error when executing given sql statement", e);
            }       
        }
        else {
            System.out.println("Failed to create connection to database."); 
        }
        System.out.println("Execution finished.");
    }
}

データの更新Update data

UPDATE SQL ステートメントを使用してデータを変更するには、次のコードを使用します。Use the following code to change the data with an UPDATE SQL statement. getConnection() メソッドは MySQL への接続に使用されます。The getConnection() method is used to connect to MySQL. prepareStatement() メソッドと executeUpdate() メソッドは、UPDATE ステートメントの準備と実行に使用されます。The methods prepareStatement() and executeUpdate() are used to prepare and run the update statement.

host、database、user、password の各パラメーターは、独自のサーバーとデータベースの作成時に指定した値に置き換えてください。Replace the host, database, user, and password parameters with the values that you specified when you created your own server and database.

import java.sql.*;
import java.util.Properties;

public class UpdateTable {
    public static void main (String[] args)  throws Exception
    {
        // Initialize connection variables. 
        String host = "mydemoserver.mysql.database.azure.com";
        String database = "quickstartdb";
        String user = "myadmin@mydemoserver";
        String password = "<server_admin_password>";

        // check that the driver is installed
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch (ClassNotFoundException e)
        {
            throw new ClassNotFoundException("MySQL JDBC driver NOT detected in library path.", e);
        }
        System.out.println("MySQL JDBC driver detected in library path.");

        Connection connection = null;

        // Initialize connection object
        try
        {
            String url = String.format("jdbc:mysql://%s/%s", host, database);
            
            // set up the connection properties
            Properties properties = new Properties();
            properties.setProperty("user", user);
            properties.setProperty("password", password);
            properties.setProperty("useSSL", "true");
            properties.setProperty("verifyServerCertificate", "true");
            properties.setProperty("requireSSL", "false");

            // get connection
            connection = DriverManager.getConnection(url, properties);
        }
        catch (SQLException e)
        {
            throw new SQLException("Failed to create connection to database.", e);
        }
        if (connection != null) 
        { 
            System.out.println("Successfully created connection to database.");
        
            // Perform some SQL queries over the connection.
            try
            {
                // Modify some data in table.
                int nRowsUpdated = 0;
                PreparedStatement preparedStatement = connection.prepareStatement("UPDATE inventory SET quantity = ? WHERE name = ?;");
                preparedStatement.setInt(1, 200);
                preparedStatement.setString(2, "banana");
                nRowsUpdated += preparedStatement.executeUpdate();
                System.out.println(String.format("Updated %d row(s) of data.", nRowsUpdated));
    
                // NOTE No need to commit all changes to database, as auto-commit is enabled by default.
            }
            catch (SQLException e)
            {
                throw new SQLException("Encountered an error when executing given sql statement.", e);
            }       
        }
        else {
            System.out.println("Failed to create connection to database.");
        }
        System.out.println("Execution finished.");
    }
}

データの削除Delete data

DELETE SQL ステートメントを使用してデータを削除するには、次のコードを使用します。Use the following code to remove data with a DELETE SQL statement. getConnection() メソッドは MySQL への接続に使用されます。The getConnection() method is used to connect to MySQL. prepareStatement() メソッドと executeUpdate() メソッドは、UPDATE ステートメントの準備と実行に使用されます。The methods prepareStatement() and executeUpdate() are used to prepare and run the update statement.

host、database、user、password の各パラメーターは、独自のサーバーとデータベースの作成時に指定した値に置き換えてください。Replace the host, database, user, and password parameters with the values that you specified when you created your own server and database.

import java.sql.*;
import java.util.Properties;

public class DeleteTable {
    public static void main (String[] args)  throws Exception
    {
        // Initialize connection variables.
        String host = "mydemoserver.mysql.database.azure.com";
        String database = "quickstartdb";
        String user = "myadmin@mydemoserver";
        String password = "<server_admin_password>";
        
        // check that the driver is installed
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch (ClassNotFoundException e)
        {
            throw new ClassNotFoundException("MySQL JDBC driver NOT detected in library path.", e);
        }

        System.out.println("MySQL JDBC driver detected in library path.");

        Connection connection = null;

        // Initialize connection object
        try
        {
            String url = String.format("jdbc:mysql://%s/%s", host, database);
            
            // set up the connection properties
            Properties properties = new Properties();
            properties.setProperty("user", user);
            properties.setProperty("password", password);
            properties.setProperty("useSSL", "true");
            properties.setProperty("verifyServerCertificate", "true");
            properties.setProperty("requireSSL", "false");
            
            // get connection
            connection = DriverManager.getConnection(url, properties);
        }
        catch (SQLException e)
        {
            throw new SQLException("Failed to create connection to database", e);
        }
        if (connection != null) 
        { 
            System.out.println("Successfully created connection to database.");
        
            // Perform some SQL queries over the connection.
            try
            {
                // Delete some data from table.
                int nRowsDeleted = 0;
                PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM inventory WHERE name = ?;");
                preparedStatement.setString(1, "orange");
                nRowsDeleted += preparedStatement.executeUpdate();
                System.out.println(String.format("Deleted %d row(s) of data.", nRowsDeleted));
    
                // NOTE No need to commit all changes to database, as auto-commit is enabled by default.
            }
            catch (SQLException e)
            {
                throw new SQLException("Encountered an error when executing given sql statement.", e);
            }       
        }
        else {
            System.out.println("Failed to create connection to database.");
        }
        System.out.println("Execution finished.");
    }
}

次の手順Next steps

MySQL Connector/J のサンプル ページには他の例やサンプル コードが豊富にあります。There are numerous other examples and sample code at the MySQL Connector/J examples page.