Java JDBC CallableStatement调用存储过程

    我现在遇到一个问题, java 去调用存储过程的时候, 如果  存储过程 代码里面写的是增、删、查、改,最终有select 语句的话,java 是可以取得结果集的
  但是,如果在proc 代码里写了  DDL 语句比如 Create table drop table  后面的select 查询结果 java 就取不到了。

JDBC 调用存储过程:CallableStatement call = conn.prepareCall(“{call proc(?,?,?)}”);

conn = ...//获取sql server db 的连接
CallableStatement call = conn.prepareCall("{call proc(?,?,?)}");
//这里是设置参数,具体的是传递对象,总之最终效果是call.setInt..setString...
//统一用setObject设置入参
for (ProcPar p : ParameterList) {
    if (p.getIsOutput()) {
        call.registerOutParameter(p.getParName(), p.getDataType());
    } else {
        call.setObject(p.getParName(), p.getParValue());
    }
}
call.execute();
while(call.getMoreResults()){//遍历取值
    rs = call.getResultSet();
    while(rs.next()){
        System.out.println(rs.getString(1));
    }
}

存储过程代码:

ALTER PROCEDURE test_xj
    @pagesize int,
    @pageindex int,
    @result varchar(200) output
AS
BEGIN

    update aaA set isBit=1,create_date=GETDATE()
    select * from Sys_FPage where Pid=901001
   --ddl 语句如果释放注释就取不到结果集了
    --create table #a(id int)
    --drop table #a

    select top 10 * into #b from Sys_FPage

    select * from #b
    set @result='OK'
END
GO
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用JavaJDBCJava Database Connectivity)来调用Oracle数据库中的存储过程。下面是调用存储过程的一般步骤: 1. 首先,确保你已经正确地设置了Oracle数据库连接信息,并且已经导入了相关的JDBC驱动。 2. 创建一个Connection对象,用于与数据库建立连接。例如: ```java String url = "jdbc:oracle:thin:@localhost:1521:xe"; String username = "your_username"; String password = "your_password"; Connection connection = DriverManager.getConnection(url, username, password); ``` 3. 创建一个CallableStatement对象,用于执行存储过程。例如: ```java String sql = "{call your_procedure_name(?, ?)}"; CallableStatement cstmt = connection.prepareCall(sql); ``` 4. 设置存储过程的输入参数(如果有)。例如: ```java cstmt.setString(1, "input_parameter_value"); ``` 5. 注册输出参数(如果有)。例如: ```java cstmt.registerOutParameter(2, Types.INTEGER); // 第二个参数为输出参数的位置和类型 ``` 6. 执行存储过程。例如: ```java cstmt.execute(); ``` 7. 获取输出参数的值(如果有)。例如: ```java int outputValue = cstmt.getInt(2); // 获取第二个输出参数的值 ``` 8. 关闭CallableStatement和Connection对象。例如: ```java cstmt.close(); connection.close(); ``` 这是一个基本的jdbc调用存储过程的示例,你可以根据实际情况进行适当的修改和调整。注意,在使用JDBC调用Oracle存储过程时,需要根据具体的存储过程定义和参数类型进行相应的设置和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值