为了便于测试,先创建一个简单的表:
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调用sqlserver存储过程.pdf
Java中调用SQL Server存储过程 Eclipse 3.3
1. 使用不带参数的存储过程 2. 使用带有输入参数的存储过程 3. 使用带有输出参数的存储过程 4. 使用带有返回状态的存储过程 5. 使用带有更新计数的存储过程
主要介绍了Java中调用SQL Server存储过程详解,本文讲解了使用不带参数的存储过程、使用带有输入参数的存储过程、使用带有输出参数的存储过程、使用带有返回状态的存储过程、使用带有更新计数的存储过程等操作实例,...
SQL Server存储过程示例,在存储工程中Transaction使用示例,游标的使用示例,自定义异常的使用示例,以及Java调用SQL Server存储过程的示例代码。包括JDBC和Spring两种调用方式。
Java调用带参数的Oracle 存储过程并返回集合,
Java调用SQL_Server的存储过程详解 1使用不带参数的存储过程 2使用带有输入参数的存储过程 3使用带有输出参数的存储过程 4 使用带有返回状态的存储过程 5 使用带有更新计数的存储过程
java连接SqlServer数据库调用存储过程代码.docx
sql server调用存储过程,sql server,存储,过程,存储过程,java,jsp,EL
存储过程入门 java中调用sqlserver存储过程
PagingOperation数据库SQLServer2008分页存储过程(和java调用存储过程源代码): 调用存储过程进行分页查询速度快,尤其是数据量超过50万条的表非常重要,此代码是我们项目中使用的,实际使用情况稳定,也希望大家...
oracle sqlserver 共用存储过程
收录了java调用各种存储过程
java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集
Java调用SQLServer的存储过程详解[归类].pdf
用Java来调用server的存储过程例子,希望能帮上初学者的忙!
游标创建 存储过程创建 程序调用游标 程序调用存储过程
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
eclipse使用jdbc方式连接sql server 2012数据库 调用存储过程