package org.opengion.fukurou.db;
import java.io.UnsupportedEncodingException;
-import java.util.Calendar ; // 7.0.5.0 (2019/09/16)
+import java.util.Calendar; // 7.0.5.0 (2019/09/16)
import org.opengion.fukurou.util.StringUtil; // 6.9.8.0 (2018/05/28)
import org.opengion.fukurou.util.HybsDateUtil; // 7.0.5.0 (2019/09/16)
import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE; // 7.2.9.5 (2020/11/28)
/**
- * JavaDB(derby) や、hsqldb に対する、Javaの拡張組込み関数です。
+ * JavaDB(derby) や、hsqldb に対する、Javaの拡張組込み関数です。
*
- * staticメソッドとして、関数を定義します。引数や返り値は、各データベースの
- * 定義に準拠します。
+ * staticメソッドとして、関数を定義します。引数や返り値は、各データベースの
+ * 定義に準拠します。
*
* <pre>
* ① JavaDB の場合
* 【概要】
- * 実行するデータベースから見えるところに、ファイルを配置する必要があります。
- * java8 までなら、Javaのエクステンション(JAVA_HOME\)jre\lib\ext などですが、
- * java9以降は、CLASSPATH に設定します。
- * openGionでは、bin/const.bat で、OG_CLASSPATH 環境変数にパスを通して、
- * 使用しています。
- * 標準の Java staticメソッドを FUNCTION 定義することも出来ます。
+ * 実行するデータベースから見えるところに、ファイルを配置する必要があります。
+ * java8 までなら、Javaのエクステンション(JAVA_HOME\)jre\lib\ext などですが、
+ * java9以降は、CLASSPATH に設定します。
+ * openGionでは、bin/const.bat で、OG_CLASSPATH 環境変数にパスを通して、
+ * 使用しています。
+ * 標準の Java staticメソッドを FUNCTION 定義することも出来ます。
* 【設定】
- * JavaDBに FUNCTION を定義します。(サンプル)
+ * JavaDBに FUNCTION を定義します。(サンプル)
* DROP FUNCTION TO_CHAR;
*
* CREATE FUNCTION TO_CHAR ( VAL DOUBLE )
private static final String ENCODE = "UTF-8";
/**
- * デフォルトコンストラクターをprivateにして、
- * オブジェクトの生成をさせないようにする。
+ * デフォルトコンストラクターをprivateにして、
+ * オブジェクトの生成をさせないようにする。
*
* @og.rev 6.9.7.0 (2018/05/14) 新規作成
*/
private Functions() {}
/**
- * 数値を文字列に変換します。
+ * 数値を文字列に変換します。
*
- * この関数は、引数の double が、小数点を含まない場合は、
- * 小数点以下を出しません。
- * JavaDBの場合、数字と文字列の連結が出来ないため、文字列変換関数を用意します。
+ * この関数は、引数の double が、小数点を含まない場合は、
+ * 小数点以下を出しません。
+ * JavaDBの場合、数字と文字列の連結が出来ないため、文字列変換関数を用意します。
*
* DROP FUNCTION TO_CHAR;
*
* @return 変換した文字列
*/
public static String toChar( final double val ) {
- // 6.9.8.0 (2018/05/28) FindBugs の警告を避ける方法が、見つかりませんでした。
+ // 6.9.8.0 (2018/05/28) FindBugs の警告を避ける方法が、見つかりませんでした。
return val == (int)val ? String.valueOf( (int)val ) : String.valueOf( val );
// final int intVal = (int)val;
}
/**
- * 特殊な文字列の連結を行います。
+ * 特殊な文字列の連結を行います。
*
- * これは、第1引数の数字と、第2、第3、第4の文字列をスペースで連結した文字列を返します。
- * 引数の個数が、可変に出来ないため、完全に決め打ちです。
+ * これは、第1引数の数字と、第2、第3、第4の文字列をスペースで連結した文字列を返します。
+ * 引数の個数が、可変に出来ないため、完全に決め打ちです。
*
* DROP FUNCTION JOIN2;
*
}
/**
- * 連結文字列を指定した、文字列の連結を行います。
+ * 連結文字列を指定した、文字列の連結を行います。
*
- * これは、第1引数の連結文字列を使用して、第2、第3、第4の文字列を連結します。
- * 引数の個数が、可変に出来ないため、第2、第3、第4の文字列が、null か、ゼロ文字列の
- * 場合は、連結せずにパスします。
+ * これは、第1引数の連結文字列を使用して、第2、第3、第4の文字列を連結します。
+ * 引数の個数が、可変に出来ないため、第2、第3、第4の文字列が、null か、ゼロ文字列の
+ * 場合は、連結せずにパスします。
*
* DROP FUNCTION JOIN3;
*
}
/**
- * 対象の文字列の部分文字列を置換します。
+ * 対象の文字列の部分文字列を置換します。
*
- * ただし、source、target、replacement のどれかが、null(ゼロ文字列)の場合は、
- * 処理を実行せず、source をそのまま返します。
+ * ただし、source、target、replacement のどれかが、null(ゼロ文字列)の場合は、
+ * 処理を実行せず、source をそのまま返します。
*
* DROP FUNCTION REPLACE;
*
*
* @og.rev 6.7.3.0 (2017/01/27) 新規作成
* @og.rev 6.8.5.1 (2018/01/15) org.opengion.javadb → org.opengion.fukurou.db にパッケージ変更
- * @og.rev 6.9.8.0 (2018/05/28) source、target、replacement のどれかが、null(ゼロ文字列)の場合は、source を返す。
+ * @og.rev 6.9.8.0 (2018/05/28) source、target、replacement のどれかが、null(ゼロ文字列)の場合は、source を返す。
*
* @param source 対象の文字列
* @param target 置換したい文字列
* @param replacement 置換する文字列
- * @return 置換した文字列。
+ * @return 置換した文字列。
*/
public static String replace( final String source , final String target , final String replacement ) {
- // 6.9.8.0 (2018/05/28) source、target、replacement のどれかが、null(ゼロ文字列)の場合は、source を返す。
- if( StringUtil.isEmpty( source , target , replacement ) ) { // 一つでも、null の場合、true
+ // 6.9.8.0 (2018/05/28) source、target、replacement のどれかが、null(ゼロ文字列)の場合は、source を返す。
+ if( StringUtil.isEmpty( source , target , replacement ) ) { // 一つでも、null の場合、true
return source;
}
else {
}
// /**
-// * この文字列内にあるすべてのoldCharをnewCharに置換した結果生成される文字列を返します。
+// * この文字列内にあるすべてのoldCharをnewCharに置換した結果生成される文字列を返します。
// *
-// * String#replace( char , char )を、繰り返します。
+// * String#replace( char , char )を、繰り返します。
// *
// * @og.rev 6.7.9.0 (2017/04/28) 新規作成
// *
// * @param source 対象の文字列
// * @param target 以前の文字の集合
// * @param replacement 置換する文字の集合
-// * @return 置換した文字列。
+// * @return 置換した文字列。
// */
// public static String translate( final String source , final String target , final String replacement ) {
// String rtn = source ;
/**
* substr関数のバイト数版
- * 過去に、hsqldb 用に作成したJava関数です。
+ * 過去に、hsqldb 用に作成したJava関数です。
*
* @og.rev 6.8.5.1 (2018/01/15) org.opengion.hsqldb → org.opengion.fukurou.db にパッケージ変更
* ※ 現在未使用
*
- * @param value 変換する文字列
- * @param start 変換開始アドレス
- * @param length 変換バイト数
+ * @param value 変換する文字列
+ * @param start 変換開始アドレス
+ * @param length 変換バイト数
* @return 変換後文字列
- * @throws UnsupportedEncodingException 文字のエンコーディングがサポートされていません。
+ * @throws UnsupportedEncodingException 文字のエンコーディングがサポートされていません。
*/
public static String substrb( final String value, final int start, final int length ) throws UnsupportedEncodingException {
String rtn = null;
/**
* length関数のバイト数版
- * 過去に、hsqldb 用に作成したJava関数です。
+ * 過去に、hsqldb 用に作成したJava関数です。
*
* @og.rev 6.8.5.1 (2018/01/15) org.opengion.hsqldb → org.opengion.fukurou.db にパッケージ変更
* ※ 現在未使用
*
* @param value バイト数をカウントする文字列
* @return バイト数
- * @throws UnsupportedEncodingException 文字のエンコーディングがサポートされていません。
+ * @throws UnsupportedEncodingException 文字のエンコーディングがサポートされていません。
*/
public static int lengthb( final String value ) throws UnsupportedEncodingException {
return makeByte( value ).length;
}
/**
- * 指定の文字列をバイトコードに変換します。
- * 引数の文字列が null の場合は、return は、byte[0] を返します。
+ * 指定の文字列をバイトコードに変換します。
+ * 引数の文字列が null の場合は、return は、byte[0] を返します。
*
* @og.rev 6.8.5.1 (2018/01/15) org.opengion.hsqldb → org.opengion.fukurou.db にパッケージ変更
*
- * @param value 変換するストリング値
- * @param encode 変換する文字エンコード
+ * @param value 変換するストリング値
+ * @param encode 変換する文字エンコード
* @return 変換後文字列
*/
private static byte[] makeByte( final String value ) throws UnsupportedEncodingException {
}
/**
- * 日時文字列(yyyyMMddHHmmss)の引数1,2に対して、差分の範囲判定を行います。
+ * 日時文字列(yyyyMMddHHmmss)の引数1,2に対して、差分の範囲判定を行います。
*
- * 範囲判定を行う引数 sec1、sec2、sec3 引数には、それぞれ(秒)レベルの値を指定します。
- * 上記の引数の値が、0 の場合は、判定を回避します。
+ * 範囲判定を行う引数 sec1、sec2、sec3 引数には、それぞれ(秒)レベルの値を指定します。
+ * 上記の引数の値が、0 の場合は、判定を回避します。
*
- * sec1引数と比べて、小さければ 0 を、大きければ 1 を返します。
- * sec2引数と比べて、小さければ sec1引数の結果を、大きければ 2 を返します。
- * sec3引数と比べて、小さければ sec2引数の結果を、大きければ 3 を返します。
+ * sec1引数と比べて、小さければ 0 を、大きければ 1 を返します。
+ * sec2引数と比べて、小さければ sec1引数の結果を、大きければ 2 を返します。
+ * sec3引数と比べて、小さければ sec2引数の結果を、大きければ 3 を返します。
*
- * 通常、sec1、sec2、sec3 と、順番に大きな値にしておきます。
- * 小さいと判定された時点で、判定処理は終了します。
+ * 通常、sec1、sec2、sec3 と、順番に大きな値にしておきます。
+ * 小さいと判定された時点で、判定処理は終了します。
*
* date2 - date1 <= sec1 ⇒ 0
* > sec1 ⇒ 1
* > sec2 ⇒ 2
* > sec3 ⇒ 3
*
- * date1,date2 のどちらかが、null,ゼロ文字列の場合は、判定しません。(return "0")
+ * date1,date2 のどちらかが、null,ゼロ文字列の場合は、判定しません。(return "0")
*
* @og.rev 7.0.5.0 (2019/09/16) 新規作成
* ※ 現在未使用
* @return 判定結果
*/
public static String checkDelay( final String date1 , final String date2 , final double sec1 , final double sec2 , final double sec3 ) {
- if( StringUtil.isNull( date1,date2 ) ) { return "0"; } // どちらかが、null,ゼロ文字列の場合は、判定しません。
+ if( StringUtil.isNull( date1,date2 ) ) { return "0"; } // どちらかが、null,ゼロ文字列の場合は、判定しません。
final Calendar cal1 = HybsDateUtil.getCalendar( date1 );
final Calendar cal2 = HybsDateUtil.getCalendar( date2 );
- final double diff = ( cal2.getTimeInMillis() - cal1.getTimeInMillis() )/1000.0; // 秒に変換しておきます。
+ final double diff = ( cal2.getTimeInMillis() - cal1.getTimeInMillis() )/1000.0; // 秒に変換しておきます。
String rtn = "0";
if( sec1 > 0.0 ) {
}
/**
- * 部分文字列の出現位置を検索します。
- * 第1引数の検索元の文字列と、第2引数の部分文字列を指定します。
- * 戻り値は、Javaの indexOf とは異なり、+1 された値が返ります。
+ * 部分文字列の出現位置を検索します。
+ * 第1引数の検索元の文字列と、第2引数の部分文字列を指定します。
+ * 戻り値は、Javaの indexOf とは異なり、+1 された値が返ります。
*
* DROP FUNCTION INSTR;
- *
+ *
* CREATE FUNCTION INSTR ( VARCHAR(1000) , VARCHAR(100) )
* RETURNS INTEGER
* DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic)
* PARAMETER STYLE JAVA -- 戻り値のタイプ
* NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す
* EXTERNAL NAME 'org.opengion.fukurou.db.Functions.instr' ;
- *
+ *
* @og.rev 7.3.0.0 (2021/01/06) 新規追加
*
- * @param value 検索元の文字列
- * @param sub 部分文字列
- * @return 文字列が見つかった位置(最初が1 、見つからなければ 0 )
+ * @param value 検索元の文字列
+ * @param sub 部分文字列
+ * @return 文字列が見つかった位置(最初が1 、見つからなければ 0 )
*/
public static int instr( final String value,final String sub ) {
if( value == null || value.isEmpty() ) {
}
/**
- * 文字列を連結します。
- *
- * 文字列が、NULL の場合は、ゼロ文字列として扱います。
- * 引数がどちらも NULL の場合は、ゼロ文字列が戻されます。
- * これは、ORACLEとの互換性を考慮した関数です。
- * ORACLE は、NULLとゼロ文字列を同等にNULLとして扱うため、
- * COALESCE( VAL1,'' ) で、VAL1がNULLか、ゼロ文字列の場合は、NULLが返されます。
- * NULLを含むWHERE条件で、WHERE COALESCE( VAL1,'' ) = COALESCE( VAL2,'' )
- * としても、一致しないため、WHERE COALESCE( VAL1,'x' ) = COALESCE( VAL2,'x' )
- * とする必要がありますが、VAL1が、実際の 'x' で、VAL2がNULLの場合もマッチします。
- * 一方、Derbyでは、NULLとゼロ文字列を区別するため、COALESCE( VAL1,'x' ) の
- * VAL1の値が、NULLとゼロ文字列で、結果が変わってしまいます。
- * また、|| による文字列連結も、ORACLEとDerbyでは結果が変わるため、
- * CONCAT関数を作成して、ORACLEと同じSQL文での比較ができるようにしておきます。
+ * 文字列を連結します。
+ *
+ * 文字列が、NULL の場合は、ゼロ文字列として扱います。
+ * 引数がどちらも NULL の場合は、ゼロ文字列が戻されます。
+ * これは、ORACLEとの互換性を考慮した関数です。
+ * ORACLE は、NULLとゼロ文字列を同等にNULLとして扱うため、
+ * COALESCE( VAL1,'' ) で、VAL1がNULLか、ゼロ文字列の場合は、NULLが返されます。
+ * NULLを含むWHERE条件で、WHERE COALESCE( VAL1,'' ) = COALESCE( VAL2,'' )
+ * としても、一致しないため、WHERE COALESCE( VAL1,'x' ) = COALESCE( VAL2,'x' )
+ * とする必要がありますが、VAL1が、実際の 'x' で、VAL2がNULLの場合もマッチします。
+ * 一方、Derbyでは、NULLとゼロ文字列を区別するため、COALESCE( VAL1,'x' ) の
+ * VAL1の値が、NULLとゼロ文字列で、結果が変わってしまいます。
+ * また、|| による文字列連結も、ORACLEとDerbyでは結果が変わるため、
+ * CONCAT関数を作成して、ORACLEと同じSQL文での比較ができるようにしておきます。
*
* DROP FUNCTION CONCAT;
- *
+ *
* CREATE FUNCTION CONCAT ( VARCHAR(1000) , VARCHAR(1000) )
* RETURNS VARCHAR(2000)
* DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic)
* PARAMETER STYLE JAVA -- 戻り値のタイプ
* NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す
* EXTERNAL NAME 'org.opengion.fukurou.db.Functions.concat' ;
- *
+ *
* @og.rev 7.3.0.0 (2021/01/06) 新規追加
*
* @param val1 文字列1
}
/**
- * NULL文字列の判定変換を行います。
+ * NULL文字列の判定変換を行います。
*
- * 文字列が、NULL(または空文字列)は、文字列2を、NULLでない場合は、文字列1を返します。
- * Derbyでは、NULLと空文字列が区別されますが、ORACLE等では、区別されないため、
- * この関数でも区別しません。
- * 空文字列の場合は、NULLと同じになります。
+ * 文字列が、NULL(または空文字列)は、文字列2を、NULLでない場合は、文字列1を返します。
+ * Derbyでは、NULLと空文字列が区別されますが、ORACLE等では、区別されないため、
+ * この関数でも区別しません。
+ * 空文字列の場合は、NULLと同じになります。
*
* DROP FUNCTION NVL2;
- *
+ *
* CREATE FUNCTION NVL2 ( VARCHAR(1000) , VARCHAR(1000) , VARCHAR(1000) )
* RETURNS VARCHAR(1000)
* DETERMINISTIC -- 引数が同じなら常に同じ値を返すことを示す.(省略時はnot deterministic)
* PARAMETER STYLE JAVA -- 戻り値のタイプ
* NO SQL LANGUAGE JAVA -- 関数の中でSQLは実行しないことを示す
* EXTERNAL NAME 'org.opengion.fukurou.db.Functions.nvl2' ;
- *
+ *
* @og.rev 7.3.1.3 (2021/03/09) 新規追加
*
* @param inval 判定する文字列
* @param val1 invalがNULL(または空文字列)でない場合に返す文字列1
* @param val2 invalがNULL(または空文字列)の場合に返す文字列2
- * @return 文字列がNULLの場合は、val2 を、そうでない場合は、val1 を返す。
+ * @return 文字列がNULLの場合は、val2 を、そうでない場合は、val1 を返す。
*/
public static String nvl2( final String inval,final String val1,final String val2 ) {
return inval == null || inval.isEmpty() ? val2 : val1 ;