java.sql.PreparedStatement で 条件句に空文字があると面倒

例えば、DBのあるテーブルのSUB_NAMEというカラムがあったとする。
Oracleは ''(空文字列) を NULL として扱うので、SUB_NAME = '' という条件句は常にfalseとなる。
SUB_NAMEがNULLだとしてもfalseになる。NULLとの比較は常にfalse。
NULLの列を検索するには SUB_NAME is NULL という条件句にしなければならない。

なもんだから、Javaで代入する文字列が空文字かもしれない場合、

String sql = "select * from SYOHIN_MASTER where " ;
if(StringUtils.isBlank(val)){
   sql += "SUB_NAME is null" ;
} else {
   sql += "SUB_NAME = ?" ;
}

こんなことになるヽ(;´Д`)ノ

なんだか、where句自体を分けるのは手間もかかるしナンセンス。
プログラマとしてあるまじきコーディングだ。
そんな場合は、以下のようにwhere句をムリヤリ1個にまとめて書くことで解決。

sql += "SUB_NAME = ? or (? is null and SUB_NAME is null)" ;

スマートな記述方法なのかどうかは疑問(SQLの可読性が低いし)ですが、どうしても1文で書きたい場合に。