Ситуация
У меня есть (Tomcat )веб-приложение Java, использующее jTDS для подключения к базе данных MSSQL 2008. Это Java-приложение выполняет 99% своих хранимых процедур MSSQL, используя пользовательский ввод.
Проблема
Драйвер jTDS иногда отвечает (в разных местах приложения )с ошибкой:
Превышен максимальный уровень вложенности хранимой процедуры, функции, триггера или представления (ограничение 32 ).
Этого можно избежать, добавив prepareSQL=0
в строку подключения jTDS. Затем ошибка везде исчезает, но при всех других значениях prepareSQL
ошибка остается. Я не знаю, сколько уровней вложенности хранимых процедур добавляет jTDS, но видимо это слишком много для нашего приложения.
Вопросы
При выполнении только хранимых процедур, конечно, с использованием подготовленных операторов в коде Java, насколько сильноprepareSQL=3
(илиprepareSQL=0
)влияют на нас? Другими словами :на каждом веб-сайте люди говорят: «Никогда не используйте 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 обогнала своего конкурента в этом?