CData JDBC ドライバーとは?
CData JDBC ドライバーは、Java 開発者が 270 以上のデータソースにアプリケーションを接続できる強力なツールです。各データソースを従来のリレーショナルデータベースと同じように扱えるため、データ統合がシンプルになり、SaaS、NoSQL、ビッグデータなど、多様なデータとシームレスに連携できます。
CData JDBC ドライバーは、標準 JDBC API に厳密に準拠して設計されており、Java アプリケーションとスムーズに統合できます。接続プーリング、トランザクション管理、ステートメント実行といった機能との互換性が保証されているため、使い慣れたツールや手法をそのまま活用しながら、多様なデータソースにアクセスできます。
この記事では、CData JDBC ドライバーを使用して次の操作を行う方法を解説します。
- データソースへの接続
- テーブル(またはエンティティ)のメタデータ取得
- データのクエリと結果の取得
- ストアドプロシージャを使用した特定のアクションの実行
ここでは CData JDBC Driver for CSV を例に説明しますが、同じ原則は CData がサポートする 270 以上のデータソースすべてに適用できます。
データソースへの接続
CData JDBC Driver for CSV は、標準の JDBC Connection および DriverManager クラスを使用します。
Connection オブジェクトの作成
各 CData JDBC ドライバーには、データソースへの接続方法に関する詳細なドキュメントが付属しています。CSV ファイルを扱う場合は、通常、CSV ファイルのパス(例:C:/Users/Public/MyCSVs)を含む接続文字列を作成します。以下は、CData CSV ドライバーを使用して JDBC 接続を作成する簡単な例です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class CSVConnectionExample {
public static void main(String[] args) {
String connectionString = "jdbc:csv:URI=C:/Users/Public/MyCSVs";
// ドライバーによっては、明示的にロードする必要がある場合があります:
Class.forName("cdata.jdbc.csv.CSVDriver");
try (Connection connection = DriverManager.getConnection(connectionString)) {
System.out.println("Connection established!");
// 接続を使用
} catch (SQLException e) {
e.printStackTrace();
}
}
}
メタデータ呼び出しによるスキーマの検出
接続が確立されたら、JDBC メタデータ呼び出しを使用してデータの構造を調べることができます。ドライバーは、CSV ファイル、SaaS、サービスなどの非リレーショナルデータソースをテーブル、ビュー、カラムで構成されるテーブルモデルとして公開します。CSV ファイルの場合:
- ディレクトリ内のファイルは、データベーステーブル(読み書き可能)またはビュー(読み取り専用)として表示されます。
- CSV ファイル内のフィールドは、カラムとして表示されます。
テーブル一覧の取得
JDBC では、通常 DatabaseMetaData インターフェースを使用して、テーブルやカラムなどのスキーマ情報を取得します。以下は、ディレクトリ内で使用可能なすべてのテーブル(CSV ファイル)を一覧表示する簡単な例です。
import java.sql.*;
public class SchemaDiscoveryExample {
public static void main(String[] args) {
String connString = "jdbc:csv:URI=C:/Users/Public/MyCSVs";
try (Connection conn = DriverManager.getConnection(connString)) {
DatabaseMetaData metaData = conn.getMetaData();
// テーブルを取得: ドライバーに応じて、引数を null またはパターンに設定
try (ResultSet tables = metaData.getTables(null, null, "%", null)) {
while (tables.next()) {
System.out.println("Table Name: " + tables.getString("TABLE_NAME"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
カラムメタデータの取得
同様に、特定のテーブル内のカラムに関する情報を取得できます。
import java.sql.*;
public class ColumnMetadataExample {
public static void main(String[] args) {
String connString = "jdbc:csv:URI=C:/Users/Public/MyCSVs";
String tableName = "MyFile.csv"; // CSV ディレクトリ内のファイル
try (Connection conn = DriverManager.getConnection(connString)) {
DatabaseMetaData metaData = conn.getMetaData();
try (ResultSet columns = metaData.getColumns(null, null, tableName, null)) {
while (columns.next()) {
System.out.println("COLUMN_NAME: " + columns.getString("COLUMN_NAME"));
System.out.println("TYPE_NAME: " + columns.getString("TYPE_NAME"));
System.out.println("IS_NULLABLE: " + columns.getString("IS_NULLABLE"));
// 必要に応じて追加のメタデータを取得
System.out.println("---------");
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
データのクエリと結果の取得
CData JDBC ドライバーでは、標準の JDBC クラス(Statement、PreparedStatement、ResultSet など)を使用してデータを取得します。CSV ファイルの読み取りと解析のロジックはドライバーが内部で処理し、データベーステーブルと同じように扱えるようにします。
Statement と ResultSet の使用
ResultSet は、データに対する前方向のカーソルを提供します。データソースから行をオンデマンドでフェッチするため、大規模なデータセットの読み取りに適しています。
import java.sql.*;
public class QueryExample {
public static void main(String[] args) {
String connString = "jdbc:csv:URI=C:/Users/Public/MyCSVs";
try (Connection connection = DriverManager.getConnection(connString);
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("SELECT Email, Username FROM [MyFile.csv]")) {
while (rs.next()) {
System.out.println(
rs.getString("Email") + " | " + rs.getString("Username")
);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ストアドプロシージャを使用したアクションの実行
多くの CData JDBC ドライバーでは、ストアドプロシージャを関数のようなインターフェースとして定義し、標準の SELECT、INSERT、UPDATE、DELETE クエリでは実行できない高度な操作やカスタム操作を実行できます。これらのストアドプロシージャはパラメータを受け取り、タスクを実行して、関連する結果やステータスコードを返します。
たとえば、CData JDBC Driver for CSV には、ファイルをある場所から別の場所に移動する MoveFile プロシージャがあります。
- SourcePath:移動するファイルのパス
- DestinationPath:新しい移動先のパス
これらのプロシージャは、シンプルな EXEC ステートメントで呼び出せます。Java では、次のように実行します。
import java.sql.*;
public class StoredProcedureExample {
public static void main(String[] args) {
String connString = "jdbc:csv:URI=C:/Users/Public/MyCSVs";
String execStatement = "EXEC MOVEFILE @SourcePath = 'C:/TestFolder/Account.csv', @DestinationPath = 'C:/Users/Public/MyCSVs'";
try (Connection connection = DriverManager.getConnection(connString);
Statement stmt = connection.createStatement()) {
// ストアドプロシージャを実行
stmt.execute(execStatement);
System.out.println("MoveFile stored procedure executed successfully.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ドライバーやプロシージャによっては、CallableStatement を使用して入出力パラメータをより明示的に管理することもできます。
データ開発者のための JDBC ドライバー
CData JDBC ドライバーは、従来のデータベースに加え、SaaS、NoSQL、ビッグデータシステムなど 270 以上のデータソースに対して、一貫した SQL ベースの接続を提供することで JDBC の機能を拡張します。ResultSet を使用した効率的なクエリ、データの変更、バッチ処理、トランザクション管理、接続プーリング、ストアドプロシージャの呼び出しなど、高度な機能を備えています。
CData JDBC ドライバーを使用すると、使い慣れた SQL を通じて Java プロジェクトでデータにアクセスできる Java ライブラリを入手できます。30 日間の無償トライアルをぜひお試しいただき、データドリブンなアプリケーション開発を始めましょう!