概要
JavaアプリケーションからJDBC接続でTDVデータサービスに接続し、クエリを実行する方法について説明します。
本記事で示す例では、利用者のローカルPC(Windows10)からJavaアプリケーションを介し、リモートサーバーで実行中のTDV Server上で公開されているサンプルデータサービスにJDBCで接続します。
検証環境
| 製品 | バージョン |
|---|---|
| TDV Server |
8.7.0 |
パス設定
Windowsのコマンドプロンプトを起動し、以下のようにパスを設定します。
JAVA_HOME
JAVA_HOMEに使用するJDKのパスをセットします。
set JAVA_HOME="<使用するJDKのパス>"
PATH
%JAVA_HOME%\binをPATHにセットします。
set PATH=%JAVA_HOME%\bin;%PATH%
TDV JDBCドライバ配置
作業フォルダにTDV JDBCドライバ(csjdbc.jar)を配置します。csjdbc.jarは<TDV Server 8.7 インストールフォルダ>\apps\jdbc\libより入手可能です。
Javaプログラム作成
シンプルなJavaプログラムSelectExample.Javaを作成します。
ここでは、以下のように、ユーザー名・パスワード認証で接続しクエリを実行する処理を記述します。
import java.util.*;
import java.sql.*;
public class SelectExample {
public static void main(String[] arg) throws Exception {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
String url = "jdbc:compositesw:dbapi@:<ポート>?domain=<ドメイン名>&dataSource=<接続先公開データベース名>";
// Load driver
String user = "<ユーザー名>";
String pass = "<パスワード>";
Class.forName("cs.jdbc.driver.CompositeDriver");
// Create connection
conn = DriverManager.getConnection(url, user, pass);
// Create statement
stmt = conn.createStatement();
// Execute statement
rs = stmt.executeQuery("<実行するクエリ>");
// Get column count
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();
// Get results
while (rs.next()) {
for (int i = 0; i < columns; i++) {
Object o = rs.getObject(i + 1);
if (o == null) {
System.out.print("[NULL]");
} else {
System.out.print(o.toString());
}
System.out.print(" ");
}
System.out.println();
}
} finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
}
}
<>で囲われた箇所は実際に接続するTDV Server環境に応じて適宜置換してください。
また、JDBC接続文字列(url)にJDBCプロパティを追加することもできます。
参考)JDBC ドライバー接続 URL プロパティ(TDV 8.7)
実際の環境に接続可能なプログラムの例を以下に示します。
コンパイル
クラスパスにcsjdbc.jarを指定しサンプルJavaプログラムをコンパイルします。
javac -cp csjdbc.jar SelectExample.java
エラーが発生せず、SelectExample.classが作成されることを確認します。
サンプルプログラム実行
SelectExampleクラスを実行します。
java -cp .;csjdbc.jar SelectExample
Linux環境で実行する場合は、クラスパスの指定方法が;(セミコロン)区切りではなく:(コロン)区切りになりますのでご注意ください。
JDBC接続とクエリ実行が成功すれば、以下のようにデータが取得されます。
15 14 0.10 2003-02-01 Galileo Systems Alexander Dimetriou (519) 723-0333 Rad Expert 9000 PRO 128 MB 19 2003-02-09 2003-02-09 2003-02-07 8 Top Notch Supplier Joe Owner (215) 226-1000
18 17 0.00 2003-02-09 Justin Solutions Timothy Sanderson (520) 766-0643 Acme 950MHz w/o fan 20 2003-02-07 2003-02-07 2003-02-06 1 Acme Parts Joe Acme (510) 776-2000
10 9 0.05 2003-02-08 Eastside Manufacturing David Arnold (215) 998-0965 Acme Super Memory 21 2003-02-07 2003-02-07 2003-02-06 1 Acme Parts Joe Acme (510) 776-2000
10 9 0.05 2003-02-08 Eastside Manufacturing David Arnold (215) 998-0965 Acme Super Memory 21 2003-02-07 2003-02-07 2003-02-06 1 Acme Parts Joe Acme (510) 776-2000
10 9 0.05 2003-02-08 Eastside Manufacturing David Arnold (215) 998-0965 Acme Super Memory 21 2003-02-07 2003-02-07 2003-02-06 1 Acme Parts Joe Acme (510) 776-2000
10 9 0.05 2003-02-08 Eastside Manufacturing David Arnold (215) 998-0965 Acme Super Memory 21 2003-02-07 2003-02-07 2003-02-06 1 Acme Parts Joe Acme (510) 776-2000
10 9 0.05 2003-02-08 Eastside Manufacturing David Arnold (215) 998-0965 Acme Super Memory 21 2003-02-07 2003-02-07 2003-02-06 1 Acme Parts Joe Acme (510) 776-2000
10 9 0.05 2003-02-08 Eastside Manufacturing David Arnold (215) 998-0965 Acme Super Memory 21 2003-02-07 2003-02-07 2003-02-06 1 Acme Parts Joe Acme (510) 776-2000
29 9 0.20 2003-02-19 Victory Systems Jackson Singleton (650) 375-7000 Acme Super Memory 21 2003-02-07 2003-02-07 2003-02-06 1 Acme Parts Joe Acme (510) 776-2000
29 9 0.20 2003-02-19 Victory Systems Jackson Singleton (650) 375-7000 Acme Super Memory 21 2003-02-07 2003-02-07 2003-02-06 1 Acme Parts Joe Acme (510) 776-2000