Package nablarch.core.db.statement
Class BasicSqlParameterParser
java.lang.Object
nablarch.core.db.statement.BasicSqlParameterParser
- All Implemented Interfaces:
SqlParameterParser
名前付きバインド変数を持つSQL文を解析するクラス。
SQLの解析は、下記ルールにしたがい行う。
SQLの解析は、下記ルールにしたがい行う。
- 名前付き変数は「:」で開始される。
- 名前付き変数は、英字(大文字、小文字)、数字、アンダースコア(_)、パーセント(%)で構成されている。
- リテラルは、シングルクォートで囲われている。
- シングルクォートのエスケープは、シングルクォートである。
- リテラル内に名前付き変数のルールに一致する文字列があっても、名前付き変数として扱わない。
- コメントは存在しない。(コメント内に名前付き変数のルールに一致する文字列があった場合、名前付き変数として扱うためSQL実行時エラーが発生する。)
- SQL文の妥当性チェックは行わない。(構文エラーがあった場合は、SQLの実行時エラーとなる。)
- Author:
- Hisaaki Sioiri
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionconvertToJdbcSql
(String sql, Object obj) Nablarchの拡張構文が埋め込まれたSQL文をJDBC標準のSQL文(バインド変数を「?」に置き換えたSQL)に変換する。名前付きバインド変数のリストを取得する。
名前付きバインド変数は、「?」の位置順にリストに格納されている。getSql()
SQL文を取得する。
返却されるSQL文は、名前付きバインド変数部を「?」に置き換えたSQLvoid
SQL文を解析する。void
setLikeEscapeChar
(char likeEscapeChar) エスケープ文字を設定する。
SQL文のlike句に埋め込む条件のエスケープに使用する文字を設定する。 ここで設定した文字は、like条件のescape句に自動設定される。
void
setSqlConvertors
(List<SqlConvertor> sqlConvertors) SqlConvertorのリストを設定する。
-
Constructor Details
-
BasicSqlParameterParser
public BasicSqlParameterParser()
-
-
Method Details
-
parse
SQL文を解析する。- Specified by:
parse
in interfaceSqlParameterParser
- Parameters:
sql
- 名前付きバインド変数を持つSQL文
-
convertToJdbcSql
Nablarchの拡張構文が埋め込まれたSQL文をJDBC標準のSQL文(バインド変数を「?」に置き換えたSQL)に変換する。 Nablarchの拡張構文の変換には、デフォルトで下記のSqlConvertor
を使用する。- Specified by:
convertToJdbcSql
in interfaceSqlParameterParser
- Parameters:
sql
- SQL文obj
- 検索条件をもつオブジェクト- Returns:
- 変換後のSQL文
-
getSql
SQL文を取得する。
返却されるSQL文は、名前付きバインド変数部を「?」に置き換えたSQL- Specified by:
getSql
in interfaceSqlParameterParser
- Returns:
- SQL文
-
getNameList
名前付きバインド変数のリストを取得する。
名前付きバインド変数は、「?」の位置順にリストに格納されている。- Specified by:
getNameList
in interfaceSqlParameterParser
- 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 interfaceSqlParameterParser
- Parameters:
likeEscapeChar
- エスケープ文字
-
setSqlConvertors
SqlConvertorのリストを設定する。- Parameters:
sqlConvertors
- SqlConvertorのリスト
-