为了便于测试,先创建一个简单的表:
CREATE TABLE test
(
id INT,
name VARCHAR(10)
)
INSERT INTO test VALUES(1,'safsdf');
INSERT INTO test VALUES(2,'aaaaa');
INSERT INTO test VALUES(3,'bbbbb');
一.存储过程返回单个结果集
存储过程1如下所示:
IF OBJECT_ID ('dbo.pTestProc1') IS NOT NULL
DROP PROCEDURE dbo.pTestProc1
GO
CREATE PROCEDURE pTestProc1
(
@id INT,
@name VARCHAR(20) OUTPUT
)
AS
BEGIN
SELECT @name = name FROM test WHERE id = @id
END
存储过程2如下所示:
IF OBJECT_ID ('dbo.pTestProc2') IS NOT NULL
DROP PROCEDURE dbo.pTestProc2
GO
CREATE PROCEDURE pTestProc2
AS
BEGIN
DECLARE @sql VARCHAR(100)
SET @sql = 'SELECT id, name FROM test '
EXEC(@sql)
END
调用存储过程1,2的代码如下({call dbo.pTestProc1或2}):
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("{call dbo.pTestProc1}");
while (rs.next()) {
System.out.println(rs.getString("id") + ":" + rs.getString("name"));
}
输出结果如下:
1:safsdf
2:aaaaa
3:bbbbb
二.使用带有输入参数的存储过程
存储过程3如下所示:
IF OBJECT_ID ('dbo.pTestProc3') IS NOT NULL
DROP PROCEDURE dbo.pTestProc3
GO
CREATE PROCEDURE pTestProc3
(
@id INT
)
AS
BEGIN
SELECT id, name FROM test WHERE id = @id
END
调用代码如下:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("{call pTestProc3(1)}");
while (rs.next()) {
System.out.println(rs.getString("id") + ":" + rs.getString("name"));
}
或
PreparedStatement pstmt = conn.prepareStatement("{call pTestProc3(?)}");
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("id") + ":" + rs.getString("name"));
}
或
CallableStatement cstmt = conn.prepareCall("{call dbo.pTestProc3(?)}");
cstmt.setInt(1, 1);
ResultSet rs = cstmt.executeQuery();
while (rs.next())
System.out.println(rs.getString("id") + ":" + rs.getString("name"));
输出结果都是:
1:safsdf
三.使用带有输出参数的存储过程
存储过程4如下所示:
IF OBJECT_ID ('dbo.pTestProc4') IS NOT NULL
DROP PROCEDURE dbo.pTestProc4
GO
CREATE PROCEDURE pTestProc4
(
@id INT,
@name VARCHAR(20) OUTPUT
)
AS
BEGIN
SELECT @name = name FROM test WHERE id = @id
END
调用代码如下:
CallableStatement cstmt = conn.prepareCall("{ call dbo.pTestProc4(?,?)}");
//设置IN参数
cstmt.setInt(1,1);
//注册OUT参数
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
//执行存储过程
cstmt.execute();
//获取参数值
System.out.println( cstmt.getString(2) );
输出结果:safsdf
参考文章:http://www.qqread.com/java/2008/04/w407397.html
分享到:
相关推荐
在 Java 应用程序中,可以使用 JDBC(Java Database Connectivity)来调用 SQL Server 数据库中的存储过程。在本例中,使用了 `java.sql` 包中的 `CallableStatement` 对象来调用 `InsertUser` 存储过程。 5. JDBC ...
在Java编程环境中,如Eclipse 3.3,与数据库进行交互是常见的需求,而调用SQL Server存储过程是其中一种高效的操作方式。存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑,提高性能并降低网络流量。本篇文章...
本篇文章详细介绍了如何通过Java调用SQL Server存储过程,涵盖了几种不同类型的存储过程调用方式。 1. 使用不带参数的存储过程 对于不带参数的存储过程,我们可以通过`Statement`对象的`executeQuery`方法,配合`{...
Java调用SQL_Server的存储过程详解 1使用不带参数的存储过程 2使用带有输入参数的存储过程 3使用带有输出参数的存储过程 4 使用带有返回状态的存储过程 5 使用带有更新计数的存储过程
本话题将详细讲解如何使用Java调用带有参数的Oracle存储过程,并获取存储过程返回的集合。 首先,Oracle存储过程是一种预编译的SQL语句集合,它可以在数据库服务器端执行,提高性能,减少网络传输。`PROCEDURE.sql`...
在JavaServer Pages (JSP) 中调用SQL Server存储过程是一项常见的任务,特别是在构建Web应用程序时需要执行复杂的数据库操作。存储过程是预先编译的SQL语句集合,可以在数据库服务器上执行,提供性能优化和代码复用...
通过学习《Java存储过程学习必看.doc》和《sqlserver存储过程入门例子加讲解.pdf》,你将能够深入了解如何在Java中有效地使用SQL Server的存储过程,包括参数传递、事务控制、异常处理等高级主题。这两个文档应该...
Parameter sniffing 是指 SQL Server 在执行存储过程时,使用参数的统计信息来优化执行计划,但这种优化方式有时可能会导致执行计划的不正确,从而影响存储过程的执行速度。 在了解这个问题之前,我们通常认为存储...
通过以上两个示例,我们可以看到使用Java调用SQL Server数据库中的存储过程是比较简单的。关键在于正确地建立数据库连接、准备`CallableStatement`以及处理可能的异常情况。在实际应用中,还需要注意资源的管理和...
总的来说,Java调用SQL Server存储过程涉及以下几个关键点: 1. 加载JDBC驱动。 2. 建立数据库连接。 3. 创建CallableStatement对象,设置SQL语句,使用问号作为占位符。 4. 注册输出参数,并设置输入参数。 5. 执行...
在Java应用程序中,你可以使用JDBC(Java Database Connectivity)来调用SQL Server的存储过程。以下是一个简单的示例: ```java import java.sql.*; public class CallSPExample { public static void main...
在Java编程中,调用Microsoft SQL Server(MS SQL)的存储...这就是Java调用MS SQL存储过程的基本步骤。确保遵循最佳实践,如使用连接池管理数据库连接,以及在生产环境中处理异常和错误,以提高程序的稳定性和性能。
### JSP调用SQL Server的存储过程 在本篇文章中,我们将探讨如何通过JSP页面来调用SQL Server中的存储过程。此示例涉及到数据库表的创建、存储过程的定义以及JSP页面上的具体实现。 #### 数据库表的创建 首先,...
### jsp调用sqlserver2000存储过程 #### 一、背景介绍 在Web开发中,经常需要处理数据库操作。使用JSP(JavaServer Pages)与后端数据库进行交互是一种常见的方式。本文将详细介绍如何通过JSP来调用SQL Server 2000...
PagingOperation数据库SQLServer2008分页存储过程(和java调用存储过程源代码): 调用存储过程进行分页查询速度快,尤其是数据量超过50万条的表非常重要,此代码是我们项目中使用的,实际使用情况稳定,也希望大家...
### Java调用Oracle与SQL Server存储过程的通用方法 #### 1. **建立数据库连接** 在Java中,使用JDBC(Java Database Connectivity)来连接数据库。根据`dbType`参数动态选择正确的数据源,即Oracle或SQL Server的...
在JSP中,我们可以使用Java的JDBC(Java Database Connectivity)来连接SQL Server数据库,并调用存储过程。在这个例子中,我们使用了JDBC来连接SQL Server数据库,并调用了InsertUser存储过程。JSP代码中,我们首先...