jTDS + хранимые процедуры + prepareSQL = ошибка уровня вложенности?

Ситуация
У меня есть (Tomcat )веб-приложение Java, использующее jTDS для подключения к базе данных MSSQL 2008. Это Java-приложение выполняет 99% своих хранимых процедур MSSQL, используя пользовательский ввод.

Проблема
Драйвер jTDS иногда отвечает (в разных местах приложения )с ошибкой:

Превышен максимальный уровень вложенности хранимой процедуры, функции, триггера или представления (ограничение 32 ).

Этого можно избежать, добавив prepareSQL=0в строку подключения jTDS. Затем ошибка везде исчезает, но при всех других значениях prepareSQLошибка остается. Я не знаю, сколько уровней вложенности хранимых процедур добавляет jTDS, но видимо это слишком много для нашего приложения.

Вопросы

  1. При выполнении только хранимых процедур, конечно, с использованием подготовленных операторов в коде Java, насколько сильноprepareSQL=3(илиprepareSQL=0)влияют на нас? Другими словами :на каждом веб-сайте люди говорят: «Никогда не используйте prepareSQL=0в производственных средах». Это также применимо к этой ситуации?

  2. Если prepareSQL=0не является рекомендуемым решением, проблема безопасности и т. д., нам, возможно, следует поискать другой драйвер. jTDS не обновлялся последние 2 года, и у Microsoft есть драйвер для JDBC 4.0.Однако я не могу найти никаких тестов или сравнений между jTDS и драйвером Microsoft JDBC 4.0. Что касается драйверов Microsoft 2.0 и 3.0, то общее мнение сводилось к тому, что jTDS быстрее, лучше и эффективнее. Это все еще так с JDBC 4.0, или Microsoft обогнала своего конкурента в этом?

7
задан Perception 26 February 2013 в 19:18
поделиться