HOWTO · MySQL
JDBC を使用して MySQL データベースに接続する方法
MySQL JDBC 接続 URL を作成し、MySQL Connector/J と Java を使用して接続し、接続を確認し、リソースを閉じます。
このページの内容
MySQL JDBC 接続 URL は jdbc:mysql://host:port/database という形式です。Java では、その URL、データベースのユーザー名、パスワードを個別に DriverManager.getConnection に渡します。JDBC は、アプリケーションがドライバーを介してデータベースを操作するために使用する Java API です。
JDBC と MySQL の接続要件
Java Development Kit (JDK)、アプリケーションからの接続を受け付ける MySQL サーバー、および MySQL Connector/J が必要です。Connector/J は、MySQL 用の JDBC サポートを実装するドライバーです。その依存関係をビルドツールに追加するか、Connector/J の JAR をアプリケーションのクラスパスに追加してください。依存関係の正確なバージョンはプロジェクトと、サポートされる Java および MySQL のバージョンによって異なります。この例では、特定のリリースを前提としません。
IDE は Java の記述と実行に役立ちますが、任意です。ドライバーを JRE 拡張ディレクトリにコピーしないでください。ビルドとランタイムで同じドライバーを使用できるように、アプリケーションの依存関係として設定してください。ドライバーを選択して追加する際は、Connector/J のドキュメントまたはビルドツールの依存関係設定を参照してください。
MySQL JDBC 接続 URL を作成する
URL は正確なプレフィックス jdbc:mysql:// で始まり、その後に MySQL サーバーのホスト、ポート、データベース名が続きます。デフォルトの MySQL ポートを使用し、new という名前のデータベースを持つローカルサーバーの場合、URL は jdbc:mysql://localhost:3306/new です。
MySQL が別の場所で実行されている場合は、localhost をサーバー名またはアドレスに置き換えてください。通常の MySQL ポートは 3306 ですが、サーバー用に設定されたポートを使用してください。new はアクセスしたいデータベースに置き換えてください。データベースは存在しなければならず、MySQL アカウントにはそのデータベースへの接続権限が必要です。接続に追加の Connector/J 設定が必要な場合、URL オプションを ? の後に追加できます。プロジェクト内の Connector/J のバージョンでサポートされているオプションを使用してください。
URL はサーバーとデータベースを識別します。この例では、アカウントの資格情報は含まれません。ユーザー名とパスワードは分けて保持し、DriverManager.getConnection への引数として提供してください。アプリケーションでは、パスワードをソース管理にコミットするのではなく、設定またはシークレットストアから資格情報を読み込んでください。
Java で MySQL に接続する
次の完全なプログラムは、環境変数から URL と資格情報を読み取り、指定されたドライバークラス名をロードし、接続を開いて SELECT 1 を実行します。実行する前に MYSQL_URL、MYSQL_USER、MYSQL_PASSWORD を設定してください。MYSQL_URL には、jdbc:mysql://localhost:3306/new のように、サーバーとデータベース用の URL を含める必要があります。MySQL Connector/J をランタイムクラスパスに追加し、サーバーに到達できることを確認してください。このサービス型の例は、ここでは設定済みの MySQL インスタンスに対して検証されていないため、接続結果は示されていません。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MySQLJDBC {
public static void main(String[] args) {
String url = System.getenv("MYSQL_URL");
String username = System.getenv("MYSQL_USER");
String password = System.getenv("MYSQL_PASSWORD");
if (url == null || url.isBlank() || username == null || username.isBlank()
|| password == null || password.isBlank()) {
System.out.println("Set MYSQL_URL, MYSQL_USER, and MYSQL_PASSWORD before connecting.");
return;
}
try {
Class.forName("com.mysql.cj.jdbc.Driver");
try (Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery("SELECT 1")) {
if (result.next()) {
System.out.println("Connected; SELECT 1 returned " + result.getInt(1) + ".");
}
}
} catch (ClassNotFoundException | SQLException error) {
System.out.println("Connection failed (" + error.getClass().getSimpleName() + ").");
}
}
}
Class.forName("com.mysql.cj.jdbc.Driver") はこの例で使用されるドライバークラスを指定します。設定した Connector/J の依存関係がそれを提供していることを確認してください。DriverManager.getConnection は URL、ユーザー名、パスワードを別々の引数として受け取ります。try-with-resources 文は、実行がブロックを離れるときに結果セット、ステートメント、接続を閉じます。クエリがエラーを報告する場合も同様です。メッセージは例外の型のみを報告し、接続の詳細と資格情報は省略します。
接続を確認して閉じる
接続が成功すると、プログラムは SELECT 1 によって返された最初の列を読み取り、その値を含む確認を書き出します。この確認により、アプリケーションが接続を取得し、クエリを実行したことが示されます。ドライバーをロードできない場合、またはサーバーが接続を拒否したり受け取れなかったりする場合、プログラムは例外メッセージを出力せずに例外の型を報告します。例外メッセージには接続の詳細が含まれる可能性があるためです。
MYSQL_URL 内のホストとポートでサーバーが実行中で到達可能であること、指定されたデータベースが存在すること、アカウントに必要な権限があることを確認してください。また、Connector/J がアプリケーションのランタイムクラスパスに含まれていることを確認してください。接続とクエリを成功させるには、3 つの環境変数すべて、Connector/J の依存関係、および到達可能な MySQL サーバーが必要です。設定が不足している場合、またはドライバーや接続が失敗した場合、プログラムはメッセージを出力し、ゼロでない終了ステータスを設定せずに戻ります。これらのパスでは、クエリが成功したことは示されません。
接続を適合させるには、対象環境用の URL と資格情報を設定し、その後クエリを保持するか、アプリケーションに必要なデータベース操作に置き換えてください。URL は JDBC MySQL 接続文字列であり、DriverManager.getConnection はそれをアカウントの資格情報と組み合わせて接続を作成します。この例では try-with-resources を使用しているため、確認が完了した後に JDBC リソースが閉じられます。