Sybaseの件

既に2年前になりますが、以下の様なエントリを連日書いた時期がありました。

要約すると、トランザクション管理下において

  • Sybase Adaptive Server Enterprise 12.5.2*1

に付属しているJDBCドライバを使って、DatabaseMetaDataを取得すると、
一時表が作成されてしまう事により、単一のトランザクション内では、SELECT文とCREATE TABLEとを
同時に発行するとエラーになってしまい以下の様なメッセージが出力される。

Caused by: com.sybase.jdbc3.jdbc.SybSQLException: The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database.

結果的に、SybaseS2Daoを使用する際には、DaoMetaDataFactoryImplのDatabaseMetaDataを取得する部分に、
NotSupportedInterceptorを適用する事で、一時凌ぎする事になる、となります。


Sybase付属のJDBCドライバには、DatabaseMetaData周りでなくとも、
どうにも怪しい…納得のいかない動作をする事がそれなりにあります。
ここで、予算に余裕のあるプロジェクトでは、以下の様な選択肢もある様です。


データディレクトテクノロジーズと言う会社が販売しているDataDirect Connect for JDBCと言うプロダクトを使用する。


キチンと検証した訳ではありませんが、Sybaseに付属しているJDBCドライバよりも非常に快適に動作する様です。
当然の事ながら、S2Daoを使用する際に、上記に上げた様な一時凌ぎを行う必要はありません。
サテ、これは一体どういう事なんでしょうか…。

*1:寧ろサーバは関係ない可能性アリ