2016-04-25 5 views
1

私たちのOracleデータベースは変更できず、多くのcolがCHARSとして表されています。現時点では、比較の際にフィールドの長さにパラメータを手作業で埋めています。 FOO所与CHAR(5)DB「FOO」JOOQでsetFixedCHAR()が実装されています

String foo = "foo" 

...  
     .where(FOO_TABLE.FOO.equal(StringUtils.rightPad(foo,FOO_TABLE.FOO.getDataType().length())) 

に私はfooは従ってそのようなさびのように埋め比較を行うロボットがhere

答えるチャーであることjooq伝えることができる任意の方法がありさ

答えて

1

あなたはすべてのCHARの列のdata type bindingを実施し、いずれかの生成されたSQL文字列にバインド変数をキャストすることができます:

@Override 
public final void sql(BindingSQLContext<String> ctx) throws SQLException { 
    ctx.render().sql("CAST(? AS CHAR(5))"); 
} 

(私はちょうどCHAR長へのアクセスを取得する方法がないことに気付きましたこの方法では... https://github.com/jOOQ/jOOQ/issues/5223

バインドされた変数をプリペアドステートメントにバインドする前に、ショート/パディングしてください。または、データ型バインディングの変数バインディングロジックに直接use that logic you referenced toを入れることができます。

@Override 
public final void set(BindingSetStatementContext<String> ctx) throws SQLException { 
    ctx.statement() 
     .unwrap(OraclePreparedStatement.class) 
     .setFixedChar(ctx.index(), ctx.value()); 
} 

これらのアプローチのいずれかを使用すると、このロジックを1回だけ実装できます。

関連する問題