***\*Java程序调用存储过程\****

*Java程序调用存储过程*

需求:如果一条语句无法实现结果集,比如需要多表查询,或者需要复杂逻辑查询,我们可以选择调用存储查询出你的结果。

分析jdk api

通过connection对象的preparecall方法可以调用存储过程

得出结论:通过connection对象调用preparecall方法传递一个转义SQL语句调用存储过程,输入参数直接调用set方法传递,输出参数需要注册后,执行存储过程,通过get方法获取,参数列表的下标是从1开始的。

存储过程和存储函数的区别:

存储过程是万能的,存储函数时必须要有返回值的,oracle官方建议我们使用存储过程

模块 java.sql

软件包 java.sql

Interface CallableStatement

All Superinterfaces:

AutoCloseable , PreparedStatement , Statement , Wrapper

public interface CallableStatement

extends PreparedStatement

用于执行SQL存储过程的接口。 JDBC API提供存储过程SQL转义语法,允许以标准方式为所有RDBMS调用存储过程。 此转义语法有一个包含结果参数的表单,而不包含结果参数的表单。 如果使用,则必须将结果参数注册为OUT参数。 其他参数可用于输入,输出或两者。 参数按编号顺序引用,第一个参数为1。

{?= call [(,, ...)]}

{call [(,, ...)]}

IN参数值是使用所设定的set从继承的方法PreparedStatement 。 必须在执行存储过程之前注册所有OUT参数的类型; 通过此处提供的get方法执行后检索它们的值。

CallableStatement可以返回一个ResultSet对象或多个ResultSet对象。 使用从Statement继承的操作处理多个ResultSet对象。

为了获得最大的可移植性,应在获取输出参数值之前处理调用的ResultSet对象和更新计数。

使用java调用存储过程

首先要引入连接oracle数据库的驱动包

使用java调用存储过程

package com.zyq.oracle;

import oracle.jdbc.OracleTypes;
import oracle.jdbc.driver.OracleDriver;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcTest {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //2.获取数据库连接对象
        String url="jdbc:oracle:thin:@localhost:1521:orcl";
        String user="scott";
        String password="tiger";
        Connection connection = DriverManager.getConnection(url, user, password);
        //3.获得语句对象
        String sql="{call p_querysal_out(?,?)}";
        CallableStatement call = connection.prepareCall(sql);
        //4.设置输入参数
        call.setInt(1,7839);
        //5.注册输出参数
        call.registerOutParameter(2, OracleTypes.DOUBLE);
        //6.执行存储过程
        call.execute();
        //7.获取输出参数
        double sal = call.getDouble(2);
        System.out.println(sal);
        //8.释放资源
        call.close();
        connection.close();
    }
}

posted on   ~码铃薯~  阅读(293)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2020-01-10 oracle数据库-查询一张表中某个字段按照降序排列的前十条数据
2020-01-10 SQL语句-查询特定年份产生的数据
2020-01-10 SQL语句-查询一张表中某个字段存在相同值的数据

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示