- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在从 Java/jsp 执行 MS SQL Server 存储过程时遇到困难。我希望返回一组数据;存储过程的最后一行是来自表的常规选择语句。
(从这一点来看,在 PHP
中执行存储过程是小菜一碟。)
我查看了这些网站以寻求帮助:
www.2netave.com
www.stackoverflow.com
我没有意识到有一个函数专门用于存储过程,因为我使用的是createStatement()
。
现在,请了解存储过程在 SQL Server Management Studio 中完美执行,并且我使用 createStatement()
在 jsp/java 中执行临时查询没有任何问题。
我创建了一个不带参数的简单存储过程,只是为了缩小问题范围:
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()
来执行查询?
谢谢。
更新2:
解决方案:
为了操作表数据,我必须使用这个:
java.sql.ResultSet RS = cs.executeQuery();
它在 execute()
上失败,并且在命名 ResultSet
对象“ResultSet”时失败。过去它从未使用 createStatement()
提示过这一点。但由于某种原因,对于存储过程,它不喜欢这种命名约定。
谢谢。
最佳答案
我们的服务器像这样从 Java 调用存储过程 - 适用于 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();
关于sql - 如何在 java/jsp 中执行 MS SQL Server 存储过程并返回表数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6113674/
是否可以让标准 Java EE servlet 容器将文件解释并呈现为 JSP,即使该文件没有 .jsp 扩展名? 假设我的 WAR 根目录中有一个名为 foo.xyz 的文件。该文件包含一些 jST
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我有几个通用元素(组件),它们会生成一些 html。似乎我的选择是创建一个 taglib,或者只是将该逻辑放入一个 jsp 页面并包含 jsp。 有什么不同?积极与消极? 最佳答案 Taglibs 允
我是 Ejb-JSP 的新手,对它知之甚少。我已经创建了一个 JSP 页面,它调用 Controller Servlet,而 servlet 调用 EJB。结构就像 JSP -> Servlet ->
我想编写一个自定义 JSP 标签,其输出包括其他 JSP 标签,这些标签本身也应该被动态评估。但显然我的一切TagSupport子类写入 pageContext.getOut()无需任何进一步评估,直
我有一个包含页面顶部内容的 JSP,我们称它为 header.jsp。出于性能原因,我想呈现此 JSP 并将其刷新给用户,然后再构建页面的其余部分。 (有关性能优势的解释,请参阅 here。) 我能想
我发现自己在处理一些旧的 JSP,想做一些简单的事情,比如以 dd/mm/yyyy 格式显示今天的日期 好像没那么简单, 到目前为止,我已经导入了 java.util.* 我试过很多东西 String
关于 JSP 标签字符集的简单问题。 mytag很简单。 tag文件位于 WEB-INF/tags .这个文件在 Eclipse 中的字符集是 UTF-8。出于某种原因,UTF-8 符号无法
这让我很吃惊!我的 JSP 中有以下代码。 在我重构 SlideShow 类并公开所有属性并删除 getter/setter 之前,这段代码一直有效。所以在我看来,EL 只适用于 getter 而不
现有的一组 JSP,用英文字段标签、javascript 错误/信息消息、图像“alt”消息等硬编码,需要多语言化。 将这些 JSP 转换为使用标准 Java 多语言功能(资源包、语言环境等)的最佳方
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题
我已经在 Tomcat 6.0 下部署了我们的 War 到 Linux 服务器。在那个 Linux 机器上,我们没有打开浏览器的权限。 是否可以从命令行执行 JSP? 最佳答案 您可以使用其中 wge
有没有人建议为 JSP 设置最佳缓冲区大小?您可以使用以下页面指令在 JSP 中设置缓冲区大小 我的问题如下 我的理解是,您使用的缓冲区大小越小,客户端浏览器的性能就越好。我的假设正确吗?如
我们正在使用 JBoss 7.1.3.Final 和 Java 6。我想将 UTF-8 页面编码应用于我们网站上提供的所有 JSP 页面,因此我将其添加到我们的 web.xml 文件中
学过jsp native,想包含动态文件。我想使用 include 调用动态页面 这段代码 如果我输入 dashboard.jsp?p=about 页面打开“pages/a
在我的 JSP 页面中,我希望链接转发到另一个 JSP 页面。当用户在 home.jsp 上时,我希望他们转到 login.jsp 等。我遇到的问题是无法找到 JSP,除非我将页面放在项目文件夹中(在
我正在尝试在新的grails应用程序中使用index.jsp切换index.gsp。我将默认的index.gsp重命名为not_index.gsp,并添加了index.jsp。现在,我收到以下错误。
是否可以从服务器端 jsf 代码将资源打开到新的浏览器选项卡(如命令按钮的 target="_newtab")? 以下代码在同一选项卡中打开资源: FacesContext.getCurrentIns
我想问一个关于 .jsp 的问题。使用 jsp 语法(例如 )和 XML 语法(例如 ... )有什么不同。使用其中一种语法是否有维护或某种 advs?谢谢。 最佳答案 原始的 语法更加紧凑,但如
JSP 文件是否有行业标准命名约定? 我遇到过来自不同来源的三种约定: 全部小写 (thisismyfile.jsp) 首字母小写的驼峰式大小写 (thisIsMyFile.jsp) 首字母大写的驼峰
我是一名优秀的程序员,十分优秀!