Java调用存储过程的2种方法

用java调用:
class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\");   //加载驱动
    Connection con=DriverManager.getConnection(\"Jdbc:Odbc:test\",\"sa\",\"\");    //获得连接
    String call=\"{call proc_select(?,?)};\"          //调用语句
    CallableStatement proc=con.preparecall(call);     //调用存储过程
    proc.setString(1,\"12345678\");                  //给输入参数传值
    proc.registerOutParameter(2,Type.varchar);       //声明输出参数是什么类型的
    proc.execute();                                  //执行
    String address=proc.getString(2);                //获得输出参数


    java调用存储过程2

    存储过程可以有返回值,所以CallableStatement类有类似getResultSet这样的方法来获取返回值。当存储过程返回一个值时,你必须使用registerOutParameter方法告诉JDBC驱动器该值的SQL类型是什么。你也必须调整存储过程调用来指示该过程返回一个值。
    下面接着上面的例子。这次我们查询Dylan Thomas逝世时的年龄。这次的存储过程使用PostgreSQL的pl/pgsql:
    create function snuffed_it_when (VARCHAR) returns integer ’declare
    poet_id NUMBER;
    poet_age NUMBER;
    begin
    --first get the id associated with the poet.
    SELECT id INTO poet_id FROM poets WHERE name = $1;
    --get and return the age.
    SELECT age INTO poet_age FROM deaths WHERE mort_id = poet_id;  [Page]
    return age;
    end;’ language ’pl/pgsql’;
    另外,注意pl/pgsql参数名通过Unix和DOS脚本的$n语法引用。同时,也注意嵌入的注释,这是和Java代码相比的另一个优越性。在Java中写这样的注释当然是可以的,但是看起来很凌乱,并且和SQL语句脱节,必须嵌入到Java String中。

    下面是调用这个存储过程的Java代码:
    connection.setAutoCommit(false);
    CallableStatement proc = connection.prepareCall(\"{ ? = call snuffed_it_when(?) }\");
    proc.registerOutParameter(1, Types.INTEGER);
    proc.setString(2, poetName);
    cs.execute();
    int age = proc.getInt(2);

    如果指定了错误的返回值类型会怎样?那么,当调用存储过程时将抛出一个RuntimeException,正如你在ResultSet操作中使用了一个错误的类型所碰到的一样。

    复杂的返回值

    关于存储过程的知识,很多人好像就熟悉我们所讨论的这些。如果这是存储过程的全部功能,那么存储过程就不是其它远程执行机制的替换方案了。存储过程的功能比这强大得多。
    当你执行一个SQL查询时,DBMS创建一个叫做cursor(游标)的数据库对象,用于在返回结果中迭代每一行。ResultSet是当前时间点的游标的一个表示。这就是为什么没有缓存或者特定数据库的支持,你只能在ResultSet中向前移动。
    某些DBMS允许从存储过程中返回游标的一个引用。JDBC并不支持这个功能,但是Oracle、PostgreSQL和DB2的JDBC驱动器都支持在ResultSet上打开到游标的指针(pointer)。
    设想列出所有没有活到退休年龄的诗人,下面是完成这个功能的存储过程,返回一个打开的游标,同样也使用PostgreSQL的pl/pgsql语言:
    create procedure list_early_deaths () return refcursor as ’declare
    toesup refcursor;
    begin
    open toesup for SELECT poets.name, deaths.age FROM poets, deaths
    -- all entries in deaths are for poets. -- but the table might become generic.
    WHERE poets.id = deaths.mort_id AND deaths.age < 60;
    return toesup;
    end;’ language ’plpgsql’;

    下面是调用该存储过程的Java方法,将结果输出到PrintWriter:
    PrintWriter:
    static void sendEarlyDeaths(PrintWriter out){
    Connection con = null;

<script type="text/javascript"></script>

hibernate 执行原生sql的几种方式 NULL 博文链接:https://ynp.iteye.com/blog/2007053 立即下载

相关推荐

java调用存储过程同时返回值和多个table

java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集

Java程序调用存储过程应用举例

Java程序调用存储过程验证用户登录package com.yzy.jdbc.dao;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import oracle.jdbc.OracleTypes;p

quanleilei123的专栏 1283

海康VisionMaster使用学习笔记7-Group模块

光标需放在[]中选择循环索引,循环索引用于实现依次检测10个匹配框的顶点,若不订阅,模块会循环检测同一个匹配框。可以看到绿色是它的边缘点.为方便查看顶点,将边缘点设置为不可见。循环使能打开,开始值设为0,循环结束值设为快速匹配的匹配个数。回到上一层,点击Group工具的设置图标,圆拟合的点设置为Group工具输出的点集。图像输入源选择Group的图像输入源。区域选择Group的快速匹配的匹配框。添加订阅到Group内部的顶点检测。对匹配框区域进行顶点检测。用于定位匹配框中的顶点。添加快速匹配的匹配框。

风凌的博客 4173

Java Web之访问数据库

Java Web之访问数据库

qq_48666555的博客 3779

【OpenBMC 系列】4.启动流程 使用qume模拟ast2600-evb

1.安装openbmc适配的qume 2.启动bmc 3.使用bmc web

AiFool的博客 4458

基于OpenSSL的CA建立及证书签发(签发多域名/IP)

自签SSL证书(多域名/IP) 本文基于以下环境: 内核信息:Linux zabbix 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 系统版本:CentOS Linux release 7.6.1810 (Core) OpenSSL版本:OpenSSL 1.0.2k-fips 26 Jan 2017 【前言】 在基于OpenSSL的CA建立及证书签发一文中(后面统.

hobby云说 4646

MySQL文本类型 存储大小,及各种数据类型在Java中用什么接收

MySQL文本类型 存储大小,及各种数据类型在Java中用什么接收 MySQL文本类型 基础类型: char (M个字节,0

w13966597931的博客 3764

Android Profiler 帧率优化实战与性能调优

本文详细介绍了使用Android Profiler进行帧率优化与性能调优的实战方法。通过分析主线程状态、FPS曲线和渲染阶段耗时,精准定位卡顿根源,并提供减少过度绘制、优化绘制命令及改善资源使用的具体策略。文章结合电商、游戏等真实案例,帮助开发者有效解决卡顿问题,提升应用流畅度。

palm99的专栏 536

MySQL:varchar与date类型互转,对接java数据类型String和Date

调用springboot接口,根据传入的时间参数(Date类型),查询出对应的数据。

weixin_42585386的博客 2922

避开这些坑!STM32H750 IAP升级实战:从Bootloader设计到APP接收的完整避坑指南

本文深入探讨STM32H750 IAP升级的完整避坑指南,从Bootloader设计到APP接收的全流程实践。特别针对QSPI Flash运行限制、SRAM跳转机制和固件校验等核心问题,提供工业级解决方案,帮助开发者提升升级成功率和系统稳定性。

weixin_30471561的博客 275

保姆级教程:用ComfyUI+LTX-Video插件,5分钟搞定你的第一个AI视频(RTX 4060实测)

本文提供了一份详细的ComfyUI与LTX-Video插件使用指南,帮助用户在RTX 4060显卡上快速生成AI视频。从环境部署到图形化操作,再到提示词优化和性能调优,全面覆盖AI视频生成的各个环节,让零基础用户也能轻松上手。

weixin_33743661的博客 136

java怎么调用存储过程_Java调用存储过程的2种方法

creat proc proc_select@pid varchar(20)@address varchar(20) outputasselect @address=address from userinfo where pid=@pidgo用java调用:class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动Connection con=Dri...

weixin_42612405的博客 2859

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

Systemcall名屋 1685

存储过程中调用JAVA程序段

本文将介绍oracle存储过程调用java方法问题存储过程中调用JAVA程序段软件环境: 1、操作系统:Windows 2000 Server2、数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版3、安装路径:C:/ORACLE实现方法: 1、 创建一个文件为TEST.javapublic class TEST{public static void main (St

天涯柳絮的专栏 2383

【离线OCR】微信离线实现图片OCR文本和表格识别

基于微信本地OCR引擎(由最新版微信自动安装)。通过Python对其官方调用逻辑进行完整翻译和封装,使开发者可以用简单的API调用其强大的OCR功能。

专注于医院数据分析技术与系统开发的创作与分享。 2622

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

H2模拟mysql的存储过程

实践中还会遇到mysql的存储过程需要模拟的情况,可用H2的ALIAS来实现。

tlxamulet的博客 344

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

springboot2.0 + myBatis 调用有返回值的SQL 存储过程

springboot2.0 + myBatis 调用SQL 存储过程 1、 写在前面 最近项目需要,公司大佬写了一个很流弊的存储过程,第一次调用记录一下! 2、代码 存储过程: -- in/out 类型, in是入参 ,out是返回的参数 create or replace procedure P_DEMO ( V1 IN VARCHA...

strom_xu 2416

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

oracle调用java方法,ORACLE中调用java方法的问题

本文将介绍oracle存储过程调用java方法问题存储过程中调用JAVA程序段软件环境:1、操作系统:Windows2000Server2、数据库:Oracle8iR2(8.1.7)forNT企业版3、安装路径:C:/ORACLE实现方法:1、创建一个文件为TEST.javapublicclassTEST{publicstaticvoidmain(Stringa...

weixin_36250200的博客 446

jdbc oracle存储过程,JDBC调用oracle 存储过程

1.创建一个oracle存储过程p_empInfo2 并执行,使这段sql代码能编译存储到oracle数据库中。--输入员工号查询某个员工(7839)信息,将薪水作为返回值输出,给调用的程序使用create or replace procedure p_empInfo2(i_empno IN emp.empno%TYPE, o_sal out emp.Sal%TYPE) asbeginselec...

weixin_35709751的博客 1451

oracle存储过程调用java_oracle存储过程调用java程序

oracle存储过程调用java程序编写要被调用的java程序:import java.io.FileWriter;public class Procedure2JavaTest {public static void sendMsg(java.lang.String title, java.lang.String content)throws Exception {String str=titl...

weixin_42190030的博客 570

JAVA调用sqlserver存储过程的实现(返回多个结果集的实现)

1、存储过程 USE [YZC_BI] GO /****** Object: StoredProcedure [dbo].[CalYlfwColumnData] Script Date: 08/20/2014 09:24:27 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- =====================

zmhzhangminhua的专栏 5841

oracle存储过程 调用java_Oracle存储过程调用Java方法

Oracle存储过程调用Java方法时间:2017-07-11 来源:存储过程中调用Java程序段软件环境:1、操作系统:Windows 2000 Server2、数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版3、安装路径:C:\ORACLE实现方法:1、创建一个文件为Test.javapublic class Test {public static void main...

weixin_42434656的博客 233
上一篇: hibernate调用存储过程
下一篇: 在 Java 中应用设计模式 -- Singleton
SpringJava
博客等级 码龄20年 8粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值