Class BasicSqlParameterParser

java.lang.Object
nablarch.core.db.statement.BasicSqlParameterParser
All Implemented Interfaces:
SqlParameterParser

public class BasicSqlParameterParser extends Object implements SqlParameterParser
名前付きバインド変数を持つSQL文を解析するクラス。
SQLの解析は、下記ルールにしたがい行う。
  • 名前付き変数は「:」で開始される。
  • 名前付き変数は、英字(大文字、小文字)、数字、アンダースコア(_)、パーセント(%)で構成されている。
  • リテラルは、シングルクォートで囲われている。
  • シングルクォートのエスケープは、シングルクォートである。
  • リテラル内に名前付き変数のルールに一致する文字列があっても、名前付き変数として扱わない。
  • コメントは存在しない。(コメント内に名前付き変数のルールに一致する文字列があった場合、名前付き変数として扱うためSQL実行時エラーが発生する。)
  • SQL文の妥当性チェックは行わない。(構文エラーがあった場合は、SQLの実行時エラーとなる。)
本クラスは、解析したSQLの情報を保持するためスレッドアンセーフである。
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    Nablarchの拡張構文が埋め込まれたSQL文をJDBC標準のSQL文(バインド変数を「?」に置き換えたSQL)に変換する。
    名前付きバインド変数のリストを取得する。
    名前付きバインド変数は、「?」の位置順にリストに格納されている。
    SQL文を取得する。
    返却されるSQL文は、名前付きバインド変数部を「?」に置き換えたSQL
    void
    SQL文を解析する。
    void
    setLikeEscapeChar(char likeEscapeChar)
    エスケープ文字を設定する。
    SQL文のlike句に埋め込む条件のエスケープに使用する文字を設定する。 ここで設定した文字は、like条件のescape句に自動設定される。
    void
    SqlConvertorのリストを設定する。

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • BasicSqlParameterParser

      public BasicSqlParameterParser()
  • Method Details

    • parse

      public void parse(String sql)
      SQL文を解析する。
      Specified by:
      parse in interface SqlParameterParser
      Parameters:
      sql - 名前付きバインド変数を持つSQL文
    • convertToJdbcSql

      public String convertToJdbcSql(String sql, Object obj)
      Nablarchの拡張構文が埋め込まれたSQL文をJDBC標準のSQL文(バインド変数を「?」に置き換えたSQL)に変換する。

      Nablarchの拡張構文の変換には、デフォルトで下記のSqlConvertorを使用する。

      Specified by:
      convertToJdbcSql in interface SqlParameterParser
      Parameters:
      sql - SQL文
      obj - 検索条件をもつオブジェクト
      Returns:
      変換後のSQL文
    • getSql

      public String getSql()
      SQL文を取得する。
      返却されるSQL文は、名前付きバインド変数部を「?」に置き換えたSQL
      Specified by:
      getSql in interface SqlParameterParser
      Returns:
      SQL文
    • getNameList

      public List<String> getNameList()
      名前付きバインド変数のリストを取得する。
      名前付きバインド変数は、「?」の位置順にリストに格納されている。
      Specified by:
      getNameList in interface SqlParameterParser
      Returns:
      名前付きバインド変数リスト
    • setLikeEscapeChar

      public void setLikeEscapeChar(char likeEscapeChar)
      エスケープ文字を設定する。
      SQL文のlike句に埋め込む条件のエスケープに使用する文字を設定する。 ここで設定した文字は、like条件のescape句に自動設定される。
       String sql = "select user_id, user_kanji_name from usr where user_kanji_name like :%userKanjiName";
       BasicSqlParameterParser parser = new BasicSqlParameterParser();
       parser.setLikeEscapeChar("\");
       parser.parse(sql);
       parser.getSql(); -> select user_id, user_kanji_name from usr where user_kanji_name like ? ESCAPE '\'
       
      Specified by:
      setLikeEscapeChar in interface SqlParameterParser
      Parameters:
      likeEscapeChar - エスケープ文字
    • setSqlConvertors

      public void setSqlConvertors(List<SqlConvertor> sqlConvertors)
      SqlConvertorのリストを設定する。
      Parameters:
      sqlConvertors - SqlConvertorのリスト