如何在java / jsp中执行MS SQL Server存储过程,返回表数据?

我很难从Java / jsp执行MS SQLServer存储过程。我希望返回一个表数据集;存储过程的最后一行是来自表的常规select语句。

(从这一点来看,执行存储过程很困难PHP。)

我没有意识到有一个功能仅用于存储过程,就像我正在使用的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页面的servlet引擎。并且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()用于执行查询的存储过程?

谢谢。

解:

为了操作表数据,我必须使用以下命令:

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

它失败,execute()并且在命名ResultSet对象“ ResultSet”

时失败。过去它从来没有抱怨过createStatement()。但是由于某种原因,对于存储过程,它不喜欢这种命名约定。

谢谢。

回答:

我们的服务器像这样从Java调用存储的proc-在SQL Server 2000和2008上均可使用:

String SPsql = "EXEC <sp_name> ?,?";   // for stored proc taking 2 parameters

Connection con = SmartPoolFactory.getConnection(); // java.sql.Connection

PreparedStatement ps = con.prepareStatement(SPsql);

ps.setEscapeProcessing(true);

ps.setQueryTimeout(<timeout value>);

ps.setString(1, <param1>);

ps.setString(2, <param2>);

ResultSet rs = ps.executeQuery();

以上是 如何在java / jsp中执行MS SQL Server存储过程,返回表数据? 的全部内容, 来源链接: utcz.com/qa/411258.html

回到顶部