状況
jTDS を使用して MSSQL 2008 データベースに接続する (Tomcat) Java Web アプリケーションがあります。この Java アプリケーションは、ユーザー入力を使用して MSSQL ストアド プロシージャの 99% を実行します。
問題
jTDS ドライバーは、(アプリケーション内のさまざまな場所で) ときどきエラーを返します。
ストアド プロシージャ、関数、トリガー、またはビューの最大ネスト レベルを超えました (制限 32)。
prepareSQL=0
これは、jTDS 接続文字列に追加することで回避できます。その後、エラーはどこでも消えますが、 の他のすべての値でprepareSQL
は、エラーは残ります。jTDS が追加するストアド プロシージャのネスト レベルの数はわかりませんが、明らかに、アプリケーションには多すぎます。
質問
prepareSQL=3
ストアド プロシージャのみを実行し、もちろん Java コードでプリペアド ステートメントを使用すると、 (またはprepareSQL=0
)はどれくらいの効果があるでしょうか? 言い換えれば、すべてのWebサイトで「prepareSQL=0
本番環境では使用しないでください」と言っているのを見つけましたが、それはこの状況にも当てはまりますか?推奨される解決策でない場合
prepareSQL=0
や、セキュリティ上の問題などがある場合は、別のドライバーを探す必要があります。jTDS は過去 2 年間更新されておらず、Microsoft には JDBC 4.0 用のドライバーがあります。ただし、jTDS と Microsoft の JDBC 4.0 ドライバーのベンチマークや比較は見つかりません。Microsoft の 2.0 および 3.0 ドライバーでは、jTDS の方が高速で、優れており、効率的であるというのが一般的な意見のようです。JDBC 4.0 の場合もそうですか、それとも Microsoft はこれで競合他社を追い越しましたか?