OracleのJDBC Driverは、Unicodeのマッピングに一部問題があり、~が化けてしまいます。この問題に対処するには、jdbc.diconのResultSetFactoryの設定を変更します。通常は下記のようになっています。
<component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<!-- <component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/> -->
BasicResultSetFactoryの部分をコメントアウトし、かわりに直ぐ下のOracleResultSetFactoryの部分のコメントをはずし有効にします。
<!-- <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/> --> <component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>
Oracleのようにboolean型に対応していないRDBMSもあります。この問題に対処するには、jdbc.diconのStatementFactoryの設定を変更します。通常は下記のようになっています。
<component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
<arg>
<component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
<!--
<component class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
-->
...
</arg>
</component>
BasicStatementFactoryの部分をコメントアウトし、かわりにBooleanToIntStatementFactoryの部分のコメントをはずし有効にします。
<component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
<arg>
<!--
<component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
-->
<component class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
...
</arg>
</component>
S2JDBCで実行したSQLはログとして記録されるためアプリケーションから参照することが可能です。
SQLのログはorg.seasar.extension.jdbc.SqlRegistry のインスタンスから取得します。
SqlRegistry のインスタンスはDIもしくはルックアップにより取得できます。
DIのための設定は次のようになります。
<component name="sqlLogRegistry" class="org.seasar.extension.jdbc.SqlLogRegistry">
@org.seasar.extension.jdbc.SqlLogRegistryLocator@getInstance()
</component>
プログラムから直接ルックアップする場合は次のようなコードが必要です。
SqlLogRegistry sqlLogRegistry = SqlLogRegistryLocator.getInstance();
SqlRegistry のインスタンスは複数のログを保持しています(デフォルトでは最新3つのログを保持します)。
最新の(最後に実行された)SQLのログは次のようなコードで取得できます。
SqlLog sqlLog = sqlLogRegistry.getLast();
org.seasar.extension.jdbc.SqlLog のインスタンスは次の情報を保持しています。
- 未加工のSQL
- バインド変数を実際の値で置き換えた完全なSQL
- SQLにバインドされる値の配列
- SQLにバインドされる値の型の配列
|