zoukankan      html  css  js  c++  java
  • ****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();
        }
    }
    
    
  • 相关阅读:
    Photoshop色阶、曲线命令图解和编程实现(附源码)
    苹果Mac OS X快捷键大全
    lucene Field部分参数设置含义
    图片管理下载逻辑
    Lucene.Net无障碍学习和使用:索引篇 (转)
    Firebug 调试器开发中的12个技巧
    Lucene.Net 多线程操作建议(转)
    如何在ASP.NET中下载文件
    Lucene.Net 2.3.1开发介绍 —— 简介 (转)
    JS打开图片另存为对话框 (转)
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/14259122.html
Copyright © 2011-2022 走看看