//通过sqlserver exec方法调用存储过程
stmt = conn.prepareCall("EXEC dbo.sp_Query_GetVehiceTimeOuts '01'");
//jdbc通用语法为
// stmt = conn.prepareCall("{call dbo.sp_Query_GetVehiceTimeOuts(?)}");
// stmt.setString(1, "01");
boolean hashResult = stmt.execute();
while (true) {
//判断本次循环是否为数据集
if (hashResult) {
System.out.println("为数据集");
ResultSet rs = stmt.getResultSet();
// Do something with resultset ...
while (rs.next()){
System.out.println(rs.getString(1));
} else {
System.out.println("本次不为数据集");
int updateCount = stmt.getUpdateCount();
if (updateCount == -1) {
当updateCount为-1时,
代表存储过程返回的最后一条数据集
System.out.println("最后一次");
break;
// Do something with update count ...
每次判断下一个是否为了数据集
stmt.getMoreResults() 为 true表示下一次循环为数据集,false为空
hashResult = stmt.getMoreResults();
System.out.println(hashResult);
大体的逻辑就是
首先是死循环,
然后判断提交sql返回的收个数据是否为结果集,
如果是就进入结果集处理,如果不是,通过getUpdateCount方法获取下一个结果,并判断getUpdateCount结果是否为-1,-1代表最后一条结果集,当结果为-1时跳出循环,否则继续循环该段代码
这几天,公司重构一套erp,用到很多存储过程,但我在用jdbc调用存储过程的时候发现无法接收多个结果集(存储过程select返回的Result),而且国内很难找到解决方案,今天下午花了一下午,最后终于实现了。
因为
sqlserver
2k的官方驱动问题,一直以来用
jdbc
没有很好的办法取多结果
集
,公司系统里采用的是2种方式来搞,一种是增删查改用
jdbc
方式,对报表统计那块就采用odbc的方式,因为最近要改为连接池访问数据库,所以才有时间专门针对取多结果
集
的问题进行研究。
原来在odbc中取结果
集
的方式是
[code="java"]Connection DBConn = null;
Sta...
oracle 中存储结果
集
一般使用的是游标,所以,一般 select 一个结果
集
后会保存在游标中,而
jdbc
调用
该
存储过程
时,只需要提取该游标即可。
需要注意的是通过 Cursor 定义的游标变量,无法做为
存储过程
的返回值,这里需要用到 自定义的游标变量,使用 "Type 游标类型名 is REF CURSOR"。
1、一般的做法是需要创建在oracle中创建包,包头是该自...
//方式一:使用SqlDataAdapter
SqlDataAdapter sda = new SqlDataAdapter();
DataSet ds = new DataSet();
sda.Fill(ds);//Fill DataSet:如果结果
集
有
多个
,对应dataset中的
多个
table
问题描述:有时使用
JDBC
进行数据库查询时会返回
多个
结果
集
,但是PreparedStatement方式只能接收第一个结果
集
。
例如在SQL Server中执行sp_help 'test.student',该语句会返回至少7个结果
集
。
1、使用PreparedStatement进行
JDBC
操作
public class MSSqlTest {
public static void main...
4. 通过
调用
CallableStatement对象的setXXX()方法为
存储过程
传递参数。
5.
调用
CallableStatement对象的execute()方法执行
存储过程
。
6. 通过
调用
CallableStatement对象的getXXX()方法
获取
存储过程
返回的结果。
7. 最后,关闭数据库连接对象和CallableStatement对象。
例如,
调用
一个名为my_function的
存储过程
,该过程有两个输入参数和一个输出参数,可以使用以下Java代码:
import java.sql.*;
public class CallFuncDemo {
public static void main(String[] args) throws SQLException {
Connection conn = null;
CallableStatement stmt = null;
try {
conn = DriverManager.getConnection("
jdbc
:postgresql://localhost:5432/mydb", "username", "password");
stmt = conn.prepareCall("{? = call my_function(?, ?)}");
stmt.registerOutParameter(1, Types.INTEGER);
stmt.setInt(2, 100);
stmt.setInt(3, 200);
stmt.execute();
int result = stmt.getInt(1);
System.out.println("The result is " + result);
} catch(SQLException e) {
e.printStackTrace();
} finally {
if(stmt != null) {
stmt.close();
if(conn != null) {
conn.close();
在这个例子中,我们创建了一个数据库连接对象conn,并使用prepareCall()方法创建一个CallableStatement对象stmt来
调用
存储过程
。接着,我们使用registerOutParameter()方法为输出参数注册类型,并使用setXXX()方法为输入参数设置值。
调用
execute()方法执行
存储过程
。最后,我们使用getInt()方法
获取
输出参数的值。注意,在
调用
完毕后需要关闭数据库连接对象和CallableStatement对象。