Class DatabaseFetchRule

java.lang.Object
com.streamconverter.command.rule.DatabaseFetchRule
All Implemented Interfaces:
IRule

public class DatabaseFetchRule extends Object implements IRule
データベースからデータを取得するルール

このクラスは、データベースからデータを取得するためのルールを定義します。 具体的なデータベース接続やクエリ実行のロジックは、このクラスで実装されます。

使用例:


 // 基本的な使用例
 DatabaseFetchRule rule = new DatabaseFetchRule(
     "jdbc:h2:mem:testdb",
     "SELECT name FROM users WHERE id = ?"
 );
 String result = rule.apply("123"); // ユーザーID 123 の名前を取得

 // NavigateCommandと組み合わせた使用例
 JsonNavigateCommand command = new JsonNavigateCommand("$.userId", rule);
 command.execute(inputStream, outputStream); // JSON中のuserIdでDBを検索して置換
 

セキュリティ機能:

  • SELECTクエリのみ許可(INSERT/UPDATE/DELETE等は禁止)
  • SQLインジェクション攻撃の検出と防止
  • 許可されたデータベーススキーマのみ接続可能
  • 入力パラメータの自動サニタイズ
  • Constructor Details

    • DatabaseFetchRule

      public DatabaseFetchRule(String databaseUrl, String query)
      コンストラクタ

      データベースのURLとクエリを指定して、DatabaseFetchRuleのインスタンスを初期化します。 クエリは一意な結果を返すように設計されるべきです(例:DISTINCT、LIMIT句の使用など)。 セキュリティのため、URLとクエリの検証を実行します。

      Parameters:
      databaseUrl - データベースのURL(許可されたスキーマのみ)
      query - データベースに対するクエリ(SELECTクエリのみ許可)
      Throws:
      IllegalArgumentException - 無効なパラメータが指定された場合
      SecurityException - セキュリティ違反が検出された場合
  • Method Details

    • apply

      public String apply(String input)
      ルールの適用を実行します。

      このメソッドは、ストリーム変換の際にルールを適用するために使用されます。 データベースからデータを取得するロジックを実装します。 結果セットの先頭行・先頭列の値を返却します。 結果が1行1列でない場合は警告をログに出力します。

      Specified by:
      apply in interface IRule
      Parameters:
      input - 変換対象の文字列(クエリパラメータとして使用)
      Returns:
      String output クエリ結果の先頭値、または空文字列(結果がない場合)