存储过程: 返回一个结果集和两个output参数
Create PROCEDURE proTest
(
@sql varchar(8000)= ' ',
@RecordCount int = 0 output,
@PageCount int = 1 output
)as
begin
exec(@sql)
set @PageCount = 1
set @RecordCount = 100
end
public static void execute(Connection con){
try {
CallableStatement cstmt = con.prepareCall("{call proTest(?,?,?)}");
cstmt.setString(1, "select * from temp");
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
cstmt.registerOutParameter(3, java.sql.Types.INTEGER);
ResultSet rs = cstmt.executeQuery();//记录集获取到后,把rs记录集循环取出后或者调用cstmt.getMoreResults()方法后,sqlserver才会处理output返回值,否则回抛出java.sql.SQLException:Output parameters have not yet been processed. Call getMoreResults()异常
while(rs.next){
system.out.println(rs.getString(1));
}
/**或者用
rs.getMoreResults()
System.out.println("PageCount : " + cstmt.getInt(2)); //不会抛出异常
System.out.println("RecordCount : " + cstmt.getInt(3));*/
}
catch (Exception e){
e.printStackTrace();
}
}
<二>java调用mysql存储过程返回多个结果集
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MainClass {
public static void main(String[] args) throws SQLException {
Connection conn = null;
CallableStatement comm = null;
ResultSet ds = null;
String commStr = "";
String content = "";
String dbUrl = "jdbc:mysql://localhost:3306/mydb1";
String theUser = "root";
String thePw = "root";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = (Connection) DriverManager.getConnection(dbUrl, theUser,
thePw);
commStr = "call my_proc('2011-08-01')";
comm = ((java.sql.Connection) conn).prepareCall(commStr);
comm.execute();
ds = comm.getResultSet();
while (ds.next()) {
if (content == "") {
content += "结果集1:\nC1\tC2\tC3";
}
content += "\n" + ds.getString(1) + "\t" + ds.getInt(2) + "\t"
+ ds.getDate(3);
}
if (comm.getMoreResults() == true) {
content += "\n\n结果集2:\nC1\tC3";
ds = comm.getResultSet();
while (ds.next()) {
content += "\n" + ds.getString(1) + "\t" + ds.getDate(3);
}
}
System.out.println(content);
} catch (Exception e) {
} finally {
if (ds != null)
ds.close();
if (comm != null)
comm.close();
if (conn != null)
conn.close();
}
}
}
结果集1:
C1 C2 C3
zhao 10 2011-08-15
zhao 2 2011-09-16
结果集2:
C1 C3
zhenlong 2011-08-05
zhenlong 2011-09-30
mysql存储过程如下:
DROP PROCEDURE IF EXISTS mydb1.my_proc;
CREATE PROCEDURE mydb1.`my_proc`(pDate Date)
BEGIN
select * from table1 where c1 = 'zhao' and C3 > pDate;
select * from table1 where c1 = 'zhenlong' and C3 > pDate;
END;
分享到:
相关推荐
java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集
#### 五、使用Java调用存储过程返回游标 最后,我们来看看如何使用Java调用返回游标的存储过程。以下是一个PostgreSQL存储过程`list_early_deaths`的例子,它返回一个游标,其中包含了所有在60岁之前去世的诗人列表...
存储过程是预编译的SQL语句集合,可以接受参数、返回结果并执行一系列操作。函数则类似于存储过程,但必须返回一个值。在Oracle中,它们都存储在数据库中,可被多次调用,提高了代码复用性和执行效率。 在Hibernate...
下面我们将详细介绍如何使用 Java 来调用存储过程,包括不带输出参数和带有输出参数的情况。 ### 不带输出参数的存储过程 在示例的 `getsum` 存储过程中,它接受一个整数 `@n` 作为输入参数,然后计算从 1 到 `@n`...
5. **获取输出参数和结果集**:如果存储过程有输出参数,可以使用`getXXX()`方法获取。如果返回结果集,可以像处理`ResultSet`一样处理。 ```java int outputValue = cs.getInt(2); ``` 6. **关闭资源**:在...
以下是一个简单的Java调用存储过程的示例代码: ```java import java.sql.*; public class ProcedureTest { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testDB"; ...
下面将详细介绍在Java中如何调用存储过程,并探讨其相关的知识点。 1. **存储过程的概念**: 存储过程是一种数据库对象,由一系列的SQL语句和控制结构组成。它们在数据库服务器上预先编译,当需要执行时,只需调用...
存储过程是数据库中预编译的程序,由一组SQL语句组成,可以接受参数、返回结果集、执行事务控制等。存储过程的主要优点包括:提高性能(因为预编译后减少了解析时间)、提高安全(可以通过权限控制访问)、降低网络...
以一个简单的例子展示Java调用存储过程: ```java import java.sql.*; public class CallProcedure { public static void main(String[] args) { try { Connection conn = DriverManager.getConnection("jdbc:...
在数据库管理中,Java应用程序经常需要与数据库进行交互,执行SQL语句以及调用存储过程。JDBC(Java Database Connectivity)是Java平台中用于访问数据库的标准API,它提供了丰富的功能来实现这一目标。本篇文章将...
总结,Java调用存储过程主要涉及JDBC API的使用,CallableStatement对象的创建和配置,以及正确处理输入输出参数。理解这些知识点对于进行数据库交互的Java开发至关重要。在实际项目中,还需要考虑性能优化、事务...
另外,如果存储过程返回游标(结果集),可以通过`ResultSet`接口进行处理。记得检查存储过程的返回值,它通常是一个表示成功与否的状态。 在开发过程中,可以使用诸如IntelliJ IDEA或Eclipse这样的IDE进行调试,...
本文将深入探讨如何利用Java语言调用SQL Server中的存储过程,包括无输出参数和带有输出参数的情况。 ### 一、Java调用无输出参数的存储过程 #### 1. 编写存储过程 首先,我们需要在SQL Server中创建一个不带输出...
其中,`id`是方法名,`parameterType`表示没有输入参数,`resultType`则是返回结果的类型,这里我们假设存储过程返回的是一个Map。 2. **带参数的存储过程** 对于带参数的存储过程,我们需要在`<select>`标签内...
在Oracle数据库中,存储过程是预编译的SQL和PL/SQL代码集合,它们可以接收输入参数、执行复杂的业务逻辑并返回结果。当需要返回的数据不仅仅是单行单列时,可以使用结构化数组来实现多行多列的结果。Java作为常用的...
如果存储过程返回结果集,你可以使用 `cs.getResultSet()` 来获取,并通过迭代遍历结果集进行进一步的处理。对于复杂的数据操作,可能需要使用 `ResultSetMetaData` 来获取列的信息。 在实际开发中,通常会将这些...
以上就是使用Java调用存储过程的基本步骤。注意,这个例子是基于Oracle数据库的,不同的数据库可能有不同的语法和数据类型。如果你使用其他数据库(如MySQL、SQL Server),请查阅相应的JDBC驱动文档,了解特定的...