本トピックでは、POLARDB Java Database Connectivity (JDBC) ドライバーを使用して、Java アプリケーションを ApsaraDB for POLARDB データベースに接続する方法について説明します。
始める前に
- ApsaraDB for POLARDB クラスターのアカウントが作成されている必要があります。 アカウントの作成方法の詳細については、「データベースアカウントの作成」をご参照ください。
- ApsaraDB for POLARDB クラスターに接続するホストの IP アドレスをホワイトリストに追加されている必要があります。 詳細については、「POLARDB クラスターのホワイトリストの設定」をご参照ください。
このタスクについて
JDBC は、プログラミング言語 Java のアプリケーションプログラミングインターフェイスであり、クライアントがデータベースにアクセスする方法を定義します。 ApsaraDB for POLARDB は、オープンソースの PostgreSQL JDBC ドライバーに基づいた Oracle JDBC ドライバーを提供します。 Oracle JDBC ドライバーは、LAN 通信に PostgreSQL プロトコルを使用し、Java アプリケーションが標準的かつデータベースに依存しない Java コードを使用してデータベースに接続できるようにします。
POLARDB JDBC ドライバーは、PostgreSQL 3.0 プロトコルを使用し、Java 6 (JDBC 4.0)、Java 7 (JDBC 4.1)、および Java 8 (JDBC 4.2) と互換性があります。
POLARDB JDBC ドライバーのダウンロード
POLARDB JDBC ドライバーをダウンロードします。 Alibaba Cloud は、Java 6、Java 7、および Java 8 と互換性のある 3 つの JDBC バージョンを提供します。 3 つの
JAR パッケージの名前は、それぞれ polardb-jdbc16.jar
、polardb-jdbc17.jar
、および polardb-jdbc18.jar
です。 アプリケーションで使用される JDK のバージョンに基づいて、適切な JDBC バージョンを選択できます。
POLARDB JDBC ドライバーの設定
Java アプリケーションで POLARDB JDBC ドライバーを使用する前に、JDBC ドライバーパッケージのパスを CLASSPATH
に追加する必要があります。 たとえば、JDBC ドライバーのパスが /usr/local/polardb/share/java/ である場合、次のコマンドを実行して JDBC ドライバーのパスを CLASSPATH
に追加します。
export CLASSPATH=$CLASSPATH:/usr/local/polardb/share/java/<Name of the JAR package.jar>
例:
export CLASSPATH=$CLASSPATH:/usr/local/polardb/share/java/polardb-jdbc18.jar
次のコマンドを実行して、現在の JDBC のバージョンを表示します。
#java -jar <Name of the JAR package.jar>
例:
#java -jar polardb-jdbc18.jar
POLARDB JDBC Driver 42.2.5.2.0
Maven を使用した Java プロジェクトのセットアップ
Maven を使用して Java プロジェクトをビルドしている場合は、次のコマンドを実行して、JDBC ドライバーパッケージをローカルリポジトリにインストールします。
mvn install:install-file -DgroupId=com.aliyun -DartifactId=<Name of the JAR package> -Dversion=1.1.2 -Dpackaging=jar -Dfile=/usr/local/polardb/share/java/<Name of the JAR package.jar>
例:
mvn install:install-file -DgroupId=com.aliyun -DartifactId=polardb-jdbc18 -Dversion=1.1.2 -Dpackaging=jar -Dfile=/usr/local/polardb/share/java/polardb-jdbc18.jar
次の依存関係を Maven プロジェクトの pom.xml
ファイルに追加します。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>parent</artifactId>
<version>1.1.2</version>
</dependency>
例:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>odps-jdbc</artifactId>
<version>1.1.2</version>
</dependency>
Hibernate アプリケーションのプロジェクトの設定
プロジェクトが Hibernate を使用してデータベースに接続している場合は、Hibernate 設定ファイル hibernate.cfg.xml
を開き、ApsaraDB for POLARDB データベースのドライバークラスと方言を設定します。
<property name="connection.driver_class">com.aliyun.polardb.Driver</property>
<property name="connection.url">jdbc:polardb://pc-***.o.polardb.rds.aliyuncs.com:1521/polardb_test</property>
<property name="dialect">org.hibernate.dialect.PostgresPlusDialect</property>
POLARDB JDBC ドライバーのロード
Class.forName("com.aliyun.polardb.Driver");
例
package com.aliyun.polardb;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* POLARDB JDBC DEMO
* <p>
* Please make sure the host ip running this demo is in you cluster's white list.
*/
public class PolarDBJdbcDemo {
/**
* Replace the following information.
*/
private final String host = "***.o.polardb.rds.aliyuncs.com";
private final String user = "***";
private final String password = "***";
private final String port = "1921";
private final String database = "db_name";
public void run() throws Exception {
Connection connect = null;
Statement statement = null;
ResultSet resultSet = null;
try {
Class.forName("com.aliyun.polardb.Driver");
Properties props = new Properties();
props.put("user", user);
props.put("password", password);
String url = "jdbc:polardb://" + host + ":" + port + "/" + database;
connect = DriverManager.getConnection(url, props);
/**
* create table foo(id int, name varchar(20));
*/
String sql = "select id, name from foo";
statement = connect.createStatement();
resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
System.out.println("id:" + resultSet.getInt(1));
System.out.println("name:" + resultSet.getString(2));
}
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
try {
if (resultSet ! = null)
resultSet.close();
if (statement ! = null)
statement.close();
if (connect ! = null)
connect.close();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}
}
}
public static void main(String[] args) throws Exception {
PolarDBJdbcDemo demo = new PolarDBJdbcDemo();
demo.run();
}
}
JDBC では、データベースは通常、次のような URL で表されます。
jdbc:polardb://pc-***.o.polardb.rds.aliyuncs.com:1521/polardb_test? user=test&password=Pw123456
パラメーター | 例 | 説明 |
---|---|---|
URL prefix | jdbc:polardb:// |
URL のプレフィックスを jdbc:polardb:// に設定します。
|
Endpoint | pc-***.o.polardb.rds.aliyuncs.com |
ApsaraDB for POLARDB クラスターのエンドポイント。 エンドポイントの照会方法の詳細については、「エンドポイントの表示」をご参照ください。 |
Port | 1521 |
ApsaraDB for POLARDB クラスターのポート。 デフォルト値:1521 |
Database | polardb_test |
接続するデータベースの名前。 |
Username | test |
ApsaraDB for POLARDB クラスターに接続するためのユーザー名。 |
Password | Pw123456 |
ユーザー名のパスワード。 |
データベースでクエリを実行するときは、Statement
、PreparedStatment
、または CallableStatement
オブジェクトを作成する必要があります。
前の例では、Statement
オブジェクトが作成されます。 次のサンプルコードは、PreparedStatment
オブジェクトを作成します。
PreparedStatement st = conn.prepareStatement("select id, name from foo where id > ?") ;
st.setInt(1, 10);
resultSet = st.executeQuery();
while (resultSet.next()) {
System.out.println("id:" + resultSet.getInt(1));
System.out.println("name:" + resultSet.getString(2));
}
次の例に示すように、CallableStatement
はストアドプロシージャの処理に使用されます。
String sql = "{? =call getName (?, ?, ?)}" ;
CallableStatement stmt = conn.prepareCall(sql);
stmt.registerOutParameter(1, java.sql.Types.INTEGER);
//Bind IN parameter first, then bind OUT parameter
int id = 100;
stmt.setInt(2, id); // This would set ID as 102
stmt.registerOutParameter(3, java.sql.Types.VARCHAR);
stmt.registerOutParameter(4, java.sql.Types.INTEGER);
//Use execute method to run stored procedure.
stmt.execute();
//Retrieve name with getXXX method
String name = stmt.getString(3);
Integer msgId = stmt.getInt(4);
Integer result = stmt.getInt(1);
System.out.println("Name with ID:" + id + " is " + name + ", and messegeID is " + msgId + ", and return is " + result);
次のコードは、上記のコードで使用されるストアドプロシージャ getName
を作成する方法を示しています。
CREATE OR REPLACE FUNCTION getName(
id In Integer,
name Out Varchar2,
result Out Integer
) Return Integer
Is
ret Int;
Begin
ret := 0;
name := 'Test';
result := 1;
Return(ret);
End;