cdata-cli-java について
CData JDBC Driverを使うJavaなどのJVM開発者向けのビルド段階のスキルです。cdata-cliで確認した接続やSQLをアプリケーションコードに引き継ぎ、ドライバーの設定、ライセンス、JDBCの利用方法を説明します。
主な機能
- 01ダウンロード済みJDBCドライバーjarの再利用
- 02Maven、Gradle、クラスパスの設定
- 03ドライバーライセンスの有効化
- 04JDBC接続とパラメーター化SQLの実行
活用シーン
- 01検証済みSQLのJVMアプリケーションへの組み込み
- 02検出時のOAuthトークンをアプリで再利用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cdatasoftware/ cli-skills --skill cdata-cli-javaインストール後、Claude Code で/cdata-cli-javaを入力して読み込まれたか確認します。
詳細
スキル:CData CLI — Java/JDBC ビルド
cdata-cli スキルを補完する、ビルドフェーズ向けのスキルです。cdata-cli は JDBC ドライバーを使用した検出(接続、スキーマの確認、SQL の検証)を担当します。このスキルは、同じ CData JDBC Driver を使って JVM アプリケーションのコードを書き始める段階から引き継ぎます。
ビルドスキルのなかで、最もスムーズに引き継げるスキルです。アプリに必要な JDBC jar は、検出時に cdata-cli がすでにダウンロードして有効化した jar そのものです。そこで検証したテーブル、列、SQL は、JDBC 経由でも変更なしで動作します。
言語/ドライバーエディション
| 言語 | CData エディション | エントリーポイント |
|---|---|---|
| Java(Kotlin、Scala、その他の JVM 言語も対象) | CData JDBC Driver | ドライバークラス cdata.jdbc.<source>.<Source>Driver;URL jdbc:<source>:<connection-string> |
<source> はドライバー名を小文字にしたもの(例:salesforce)、<Source> は先頭を大文字にしたもの(例:Salesforce)です。jar は cdata.jdbc.salesforce.jar、クラスは cdata.jdbc.salesforce.SalesforceDriver、URL のプレフィックスは jdbc:salesforce: です。
前提条件:最初に検出を完了する
**このセッションでまだ cdata-cli を使用していない場合は、ここで止めて、まず cdata-cli を実行してください。**このスキルはビルドフェーズのみを扱います。ここで作業を続ける前に、接続の設定、スキーマの検出、SQL の検証を cdata-cli で行う必要があります。
このスキルでは、cdata-cli をすでに使用して、データソースへの接続と、アプリで実行するテーブル/列および SQL の検証を済ませていることを前提とします。CLI は Java ネイティブで JDBC 上で動作するため、ビルドスキルのなかでも最もスムーズに引き継げます。通常、次の 2 つはすでに完了しています。
- jar はすでにダウンロードされています —
cdatacli drivers downloadにより、cdata.jdbc.<source>.jarが./lib/に配置されています(または、インストール済み製品のパスがわかっています)。 - jar のライセンス認証も済んでいる可能性が高いです — 検出時に
cdatacli drivers activateを実行していれば、drivers listに"activated": trueと表示され、同じ jar をアプリですぐに使用できます。
検出時に OAuth 接続を作成した場合は、その OAuthSettingsLocation を控えておいてください。アプリの JDBC URL から同じキャッシュ済みトークンファイルを参照すれば、再認証を省略できます(接続を参照)。
ステップ 1:ドライバー jar を取得する
検出時に取得した jar を優先して使用してください。手元にない場合は、次の方法から選んでください。
**A. CLI の jar を再利用する(最も簡単)。**同じドライバーがすでにローカルにあります。
./lib/cdata.jdbc.<source>.jar # where cdatacli drivers download put it
B. インストール済み製品のパス(JDBC ドライバー製品がインストールされている場合):
C:\Program Files\CData\CData JDBC Driver for <Source> <Year>\lib\cdata.jdbc.<datasource>.jar # Windows
/Applications/CData/CData JDBC Driver for <Source> <Year>/lib/cdata.jdbc.<datasource>.jar # macOS
**C. CData の JDBC Maven リポジトリから依存関係を追加する。**座標は CLI カタログの URL に準じます。リポジトリのベースは https://maven.cdata.com/p/jdbc/、groupId は cdata、artifactId は <source>-jdbc です。cdatacli drivers search --driver <source> で正確な artifactId/バージョンを確認してください。
// Gradle (Kotlin DSL) — verify coordinates against `cdatacli drivers search` output
repositories { maven { url = uri("https://maven.cdata.com/p/jdbc/") } }
dependencies { implementation("cdata:salesforce-jdbc:26.0.9666") }
<repository><id>cdata</id><url>https://maven.cdata.com/p/jdbc/</url></repository>
<dependency>
<groupId>cdata</groupId><artifactId>salesforce-jdbc</artifactId><version>26.0.9666</version>
</dependency>
ビルドでリモートリポジトリを解決できない場合は、ローカルの jar をビルドにインストールしてください(Gradle の implementation(files("libs/cdata.jdbc.<source>.jar"))、または Maven の mvn install:install-file)。
ステップ 2:ライセンス認証
JDBC ドライバーのライセンスはマシンごとに必要で、ADO.NET/ODBC/Python エディションとは別です。使用する jar のライセンス認証が検出時にすでに完了していれば、アプリで追加作業は不要です。
必要に応じて、次の方法でライセンス認証を行います。
- CLI 経由(トライアル版はセッション内で安全に使用できます。購入済みのキーは秘密情報なので、AI セッションの外で実行してください):
cdatacli drivers activate <Driver> --name "First Last" --email [email protected] --trial cdatacli drivers activate <Driver> --name "First Last" --email [email protected] --key XXXXX - **jar 経由:**ダブルクリックして GUI ウィザードを起動するか、対話形式を使わずに実行します。
java -jar cdata.jdbc.<source>.jar --name "First Last" --email [email protected] --key XXXXX
ドライバーは、jar と同じ場所にあるライセンスファイル(cdata.jdbc.<source>.lic)、またはユーザーの CData フォルダー(~/.CData/cdata.jdbc.<source>.lic。Windows では %USERPROFILE%\.CData\)を参照します。出荷する jar と一緒に .lic を配置するか、実行ユーザーが ~/.CData/ にライセンスファイルを持つようにしてください。
ステップ 3:クラスパスに追加する
OS に関する注意: クラスパスの区切り文字は、Windows(PowerShell/cmd)では
;、macOS/Linux では:です。 相対パスは現在のディレクトリを基準に解決されます。ソースフォルダーにcdするか、 絶対パスを使用してください。
javac -cp "cdata.jdbc.<source>.jar" App.java
java -cp ".:cdata.jdbc.<source>.jar" App # macOS/Linux — Windows: ".;cdata.jdbc.<source>.jar"
Maven/Gradle を使用する場合、ステップ 1 の依存関係によって自動的にクラスパスに追加されます。最新の
JDBC(4.0 以降)では、ServiceLoader によってドライバーが自動登録されるため、Class.forName(...) は
不要です。JAR がクラスパスにあれば十分です。
ステップ 4:接続する(JDBC)
JDBC オブジェクトは AutoCloseable なので、try-with-resources を使用してください。
import java.sql.*;
String url = "jdbc:salesforce:AuthScheme=OAuth;InitiateOAuth=GETANDREFRESH;UseSandbox=true;"
+ "OAuthSettingsLocation=C:\\...\\OAuthSettings-sbx.txt";
try (Connection conn = DriverManager.getConnection(url);
PreparedStatement ps = conn.prepareStatement(
"SELECT Id, Name FROM Account WHERE Name LIKE ?")) {
ps.setString(1, "%Acme%"); // ? positional params
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) System.out.println(rs.getString("Name"));
}
}
- JDBC URL は
jdbc:<source>:に続けて、cdatacliで検証したものと同じ、;区切りの接続 プロパティを指定します。 ?の位置パラメーター(setString/setObject)を使用します。INSERT/UPDATE/DELETE にはexecuteUpdate()を使用してください。ServiceLoaderを使う場合、ドライバーの明示的な登録は不要です。標準外の クラスローダーで検出されない場合は、Class.forName("cdata.jdbc.<source>.<Source>Driver")で登録してください。
接続文字列と認証(検出結果を再利用し、シークレットをコードに含めない)
ハードコードせず、設定から URL を組み立ててください。OAuth を使用するデータソースでは、
検出時にすでにトークンファイルが設定された OAuthSettingsLocation を指定すると、アプリが
サイレントにトークンを更新します。埋め込み OAuth アプリがないデータソース(例:Gmail)では、更新する場合でもユーザー自身の
OAuthClientId/OAuthClientSecret が必要です。これらは環境変数から読み込み、
決してコミットしないでください。
ステップ 5:エンドツーエンドの例(Java)
import java.sql.*;
import java.util.*;
public class Accounts {
private static final String URL =
"jdbc:salesforce:AuthScheme=OAuth;InitiateOAuth=GETANDREFRESH;UseSandbox=true;"
+ "OAuthSettingsLocation=C:\\...\\OAuthSettings-sbx.txt";
static List<String> list(String search, int limit) throws SQLException {
String sql = "SELECT Id, Name FROM Account"
+ (search == null ? "" : " WHERE Name LIKE ?")
+ " ORDER BY Name LIMIT " + limit;
try (Connection c = DriverManager.getConnection(URL);
PreparedStatement ps = c.prepareStatement(sql)) {
if (search != null) ps.setString(1, "%" + search + "%");
try (ResultSet rs = ps.executeQuery()) {
List<String> out = new ArrayList<>();
while (rs.next()) out.add(rs.getString("Name"));
return out;
}
}
}
static void create(String name, String industry) throws SQLException {
try (Connection c = DriverManager.getConnection(URL);
PreparedStatement ps = c.prepareStatement(
"INSERT INTO Account (Name, Industry) VALUES (?, ?)")) {
ps.setString(1, name);
ps.setString(2, industry);
ps.executeUpdate();
}
}
}
トラブルシューティング
| エラー | 原因/対処方法 |
|---|---|
No suitable driver found for jdbc:<source>:... | JAR がクラスパスにない(または URL のプレフィックスが間違っている)ことが原因です。クラスパス/依存関係に cdata.jdbc.<source>.jar を追加し、URL が jdbc:<source>: で始まっていることを確認してください。 |
Could not find a valid license | このマシンで JAR が有効化されていません。cdatacli drivers activate または JAR ウィザード(ステップ 2)で有効化してください。.lic は JAR の隣、または ~/.CData/ に置く必要があります。 |
ClassNotFoundException: cdata.jdbc.<source>.<Source>Driver | 手動で登録する場合にのみ該当します。JAR がクラスパスにないか、クラス名のスペルが間違っています(<Source> は大文字小文字を含むドライバー名です)。 |
'OAuthClientId' and 'OAuthClientSecret' are needed to initiate OAuth | データソースに埋め込み OAuth アプリがありません。キャッシュされた更新トークンに対応するアプリのクライアント ID/シークレットを環境変数から取得し、JDBC URL に追加してください。 |