Большое спасибо. Я использую JSP, однако. Тем не менее, главное - вернуть данные таблицы и манипулировать ими в JSP. Еще раз спасибо за ваш вклад.

я возникли проблемы с выполнением хранимой процедуры MS SQL Server из Java / jsp. Я хочу вернуть набор данных таблицы; последняя строка хранимой процедуры - это регулярный оператор выбора из таблицы.

(С этой точки зрения выполнение хранимой процедуры является подпоркой вPHP.)

Я взглянул на эти сайты за помощью:
www.2netave.com
www.stackoverflow.com

Я не знал, что есть функция только для хранимых процедур, так как я использовалcreateStatement() вместо.

Теперь, пожалуйста, поймите, что хранимая процедура прекрасно работает в SQL Server Management Studio, и у меня не было проблем с выполнением специальных запросов в jsp / java сcreateStatement().

Я создал простую хранимую процедуру, которая не принимает аргументов, просто чтобы сузить проблему:

CREATE PROCEDURE sp_test AS
BEGIN
PRINT 'HELLO WORLD'
END

Вот код на моей странице JSP:

Class.forName("net.sourceforge.jtds.jdbc.Driver");
java.sql.Connection conn = java.sql.DriverManager.getConnection("jdbc:jtds:sqlserver://MySQLServer:1433/test", "user", "pass");
java.sql.CallableStatement cs = conn.prepareCall("{call sp_test}"); 
java.sql.ResultSet ResultSet = cs.execute();

Браузер говорит мне, что страница не может быть отображена, потому что произошла внутренняя ошибка сервера. Я знаю, что это означает, что есть проблема с кодом выше.

Я попробовал это:

java.sql.ResultSet ResultSet = cs.executeQuery();

И это:

java.sql.CallableStatement cs = conn.prepareCall("{execute sp_test}");

И это:

java.sql.CallableStatement cs = conn.prepareCall("{exec sp_test}");

И ничего не сработало. Как только я смогу это сделать, я смогу запустить фактическую хранимую процедуру, которая возвращает данные таблицы из оператора select. Но я даже не могу заставить эту фиктивную хранимую процедуру работать.

Что я здесь не так делаю?

Спасибо.

Обновить:

Проверил журналы сервера (IIS) и мой HTTP-прокси, fiddler, и он ничего не сообщает. Однако IIS использует tomcat в качестве движка сервлета для страниц JSP. И файл журнала tomcat сообщил следующее:

An error occurred at line: 20 in the jsp file: /test.jsp
Type mismatch: cannot convert from boolean to ResultSet
17: 
18:     java.sql.CallableStatement cs = conn.prepareCall("{call sp_test}");
19:     
20:     java.sql.ResultSet ResultSet = cs.execute();
21: 
22: //  java.sql.ResultSet ResultSet = state.executeQuery(SQL); 
23: 

Я попытался изменить выше, чтобы:

cs.execute();

И файлы журнала сообщили:

- Servlet.service() for servlet jsp threw exception
java.sql.SQLException: The EXECUTE permission was denied on the object 'sp_test', database 'test', schema 'dbo'.

Итак, я понял, что долженGRANT EXECUTE пользователю. Другая проблема - возврат данных таблицы из хранимой процедуры.

Если у меня есть такая процедура:

CREATE PROCEDURE sp_test2 AS
BEGIN
SELECT * FROM TABLE
END

Как мне манипулировать данными таблицы в jsp? Было быResultSet работать или это только для специальных запросов, в отличие от хранимых процедур, где можно было бы использоватьcreateStatement() выполнить запрос?

Спасибо.

Update2:

Решение:

Чтобы манипулировать данными таблицы, мне пришлось использовать это:

java.sql.ResultSet RS = cs.executeQuery();

Не удалось наexecute() и не удалось назватьResultSet объект "ResultSet". Он никогда не жаловался на это в прошломcreateStatement(), Но по какой-то причине с хранимыми процедурами не понравилось это соглашение об именах.

Спасибо.

Ответы на вопрос(4)

Ваш ответ на вопрос