-
步骤:
JDBC调用存储过程和函数
步骤:①:通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例,在使用Connection对象的preparedCall()方法时,需要传入一个String类型的字符串,该字符串指明如何调用存储过程。
函数: [? = call [(,, … )]]
存储过程: [call [(,, … )]]②:通过CallableStatement对象reisterOutParameter方法注册OUT参数
③:通过CallableStatement对象setXxx()方法设定IN或IN OUT参数,若想把参数设为null,使用setNull()方法
④:通过CallableStatement对象的execute()方法执行存储过程。
⑤:如果调用的是带返回值的存储过程,还需要CallableStatement对象的getXxx()方法获取其返回值。
注:通过数据字典查看存储过程或函数的定义。
2 .示例代码
java调用存储过程
/**
* 调用存储过程
*/
@Test
public void testCallableStatement(){
Connection conn = null;
CallableStatement callablestatement = null;
try {
conn = TestTools.getConnection();
String sql = "{ call add0 (?, ?, ?) }";
//1.获取CallableStatement类是对象
callablestatement = conn.prepareCall(sql);
//2.注册OUT参数
callablestatement.registerOutParameter(3, Types.NUMERIC);
//3.通过setXxx()方法设定IN或OUT参数值
callablestatement.setInt(1, 10);
callablestatement.setInt(2, 20);
//4.执行存储过程
callablestatement.execute();
//5.若有返回值,需要使用getXxx()接收
int sum = callablestatement.getInt(3);
System.out.println("结果:"+sum);//结果:30
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(callablestatement, conn);
}
}
创建存储过程的SQL语句
#定义有返回值的存储过程,大小写无所谓,功能:计算两个数的值
#注意:过程名不能使用add
CREATE PROCEDURE add0(IN a INT,IN b INT,OUT result INT)
BEGIN
IF a IS NULL THEN SET a = 0;
END IF;
IF b IS NULL THEN SET b = 0;
END IF;
SET result = a + b;
SELECT result AS SUM;
END;
#调用存储过程
call add0 (10, 20, @result);
##定义无返回值的存储过程,大小写无所谓,功能:计算两个数的值
CREATE PROCEDURE add1( a INT, b INT)
BEGIN
DECLARE result INT;
IF a IS NULL THEN SET a = 0;
END IF;
IF b IS NULL THEN SET b = 0;
END IF;
SET result = a + b;
SELECT result AS SUM;
END;
#调用存储过程
call add1 (10, 20);
java调用函数
/**
* 调用函数
*/
@Test
public void testCallableStatement1(){
Connection conn = null;
CallableStatement callablestatement = null;
try {
conn = TestTools.getConnection();
String sql = "{? = call add_fun (?, ?) }";
//1.获取CallableStatement类是对象
callablestatement = conn.prepareCall(sql);
//2.注册OUT参数,其中1表示第一个问号,表示输出
callablestatement.registerOutParameter(1, Types.NUMERIC);
//3.通过setXxx()方法设定IN或OUT参数值,2,3表示第二个和第三个问号,表述输入。
callablestatement.setInt(2, 10);
callablestatement.setInt(3, 20);
//4.执行存储过程
callablestatement.execute();
//5.若有返回值,需要使用getXxx()接收
int sum = callablestatement.getInt(1);
System.out.println("结果:"+sum);
} catch (Exception e) {
e.printStackTrace();
}finally{
TestTools.release(callablestatement, conn);
}
}
创建函数的mysql语句:
#创建有返回值的函数,注意分号不要少
create function add_fun(a int, b int)
returns int
begin
declare c int;
set c = a + b;
return c;
end;
#调用函数
select add_fun(10,10) as sum
JDBC(13)—JDBC调用存储过程和函数的更多相关文章
-
Java 调用存储过程、函数
一.Java调用存储Oracle存储过程 测试用表: --创建用户表 create table USERINFO ( username ) not null, password ) not null ...
-
转:EF调用存储过程、函数
EF调用存储过程.函数 2014-04-02 09:12:20| 分类: ORM框架|举报|字号 订阅 一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...
-
MySQL学习笔记:调用存储过程或函数报1418错误
问题 MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DE ...
-
JDBC第二篇--【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 1.PreparedStatement对象 PreparedState ...
-
JDBC【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
1.PreparedStatement对象 PreparedStatement对象继承Statement对象,它比Statement对象更强大,使用起来更简单 Statement对象编译SQL语句时, ...
-
jdbc调用存储过程和函数
1.调用存储过程 public class CallOracleProc { public static void main(String[] args) throws Exception{ Stri ...
-
【转】java调用存储过程和函数
一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...
-
MyBatis中调用存储过程和函数
一.调用存储过程 1.首先在数据库中定义存储过程,定义的存储过程的代码如下: //定义存储过程 create or replace procedure pag_add(p1 varchar2,p2 v ...
-
MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别
1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...
随机推荐
-
有哪些经常被误用的 HTML、JavaScript、CSS 的元素、方法和属性?
一,以前想要把一个元素(input 之类的)设成只读的时候都是用 disabled,后来发现这是不对的. 因为在 HTML 里面,如果一个元素被设置成 disabled, 那么它的值就不会被发送到 s ...
-
coreos安装
cloud-config-bootstrap.sh #!/bin/bash cat > "cloud-config.yaml" <<EOF #cloud-conf ...
-
Linux之进程管理
==================================================================================================== ...
-
html drag 拖拽用法和注意事项
1.拖拽过程中的事件暂时jQuery里还没有,只能通过html DOM 来进行绑定,不然无法获取dataTransfer对象 2.在dragstart .dragover 等事件中可以用 evt.pr ...
-
第一篇:R语言数据可视化概述(基于ggplot2)
前言 ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念.当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理. 本文主要对ggplot2的可视化理念及开发 ...
-
从 ReactiveCocoa 中能学到什么?不用此库也能学以致用
从知道ReactiveCocoa开始就发现对这个库有不同的声音,上次参加<T>技术沙龙时唐巧对在项目中已全面使用FRP的代码家提出为什么这种编程模型出现了这么长时间怎么像ReactiveC ...
-
算法课上机实验(一个简单的GUI排序算法比较程序)
(在家里的电脑上Linux Deepin截的图,屏幕大一点的话,deepin用着还挺不错的说) 这个应该是大二的算法课程上机实验时做的一个小程序,也是我的第一个GUI小程序,实现什么的都记不清了,只记 ...
-
【洛谷U20626】gemo 容斥 FWT 高斯消元
题目大意 给你一个无向图,有\(m\)个询问,每次给你一个点\(x\)和一个点集\(S\),问你从\(x\)开始走,每次从一个点随机的走到与这个点相邻的点,问你访问\(S\)中每个点至少一次的期望步数 ...
-
Django: AttributeError: &#39;str&#39; object has no attribute &#39;resolve&#39;
再次重温Django的时候,遇到了这个错误.看了页面上,没啥有用的信息.遂谷歌一下,原来是一个很低级的错误:It's because you forgot to type the word " ...
-
css3 弹性盒模型 变化
如果你使用google搜索Flexbox,你会发现很多过时的信息.这里将告诉你如何迅速的辨别你需要的信息. 如果你正在查找有关于Flexbox的博客资料,你看到了“display:box;”或者“bo ...