java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)
本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址
https://www.baiydu.com
这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还能提高程序的执行效率, 今天在JAVA+Mysql上也实现了这个功能下面我贴出代码,这次我会讲详细点,让看的朋友能更加清楚它的好处在哪里。
一、封装的代码存储过过程调用方法
关于返回类CallableStatement的解释: CallableStatement 对象为所有的DBMS 提供了一种以标准形式调用已储存过程的方法。已储存过程储存在数据库中。对已储存过程的调用是 CallableStatement对象所含的内容。这种调用是 用一种换码语法来写的,有两种形式:一种形式带结果参,另一种形式不带结果参数。结果参数是 一种输出 (OUT) 参数,是已储存过程的返回值。两种形式都可带有数量可变的输入(IN 参数)、 输出(OUT 参数)或输入和输出(INOUT 参数)的参数。问号将用作参数的占位符。
// 调用带有输入参数且有返回值的存储过程
public static CallableStatement callProcInputAndOutPut(String sql, String[] inparameters) {
try {
conn = getConnection();
cs = conn.prepareCall(sql);
if(inparameters!=null)
for(int i=0;i<inparameters.length;i++)
{
//if中循环的参数是我们,在存储过程需要使用到的参数
if (i<inparameters.length-1) {
cs.setObject(i+1, inparameters[i]);
}
//else中的参数是我们存储过程执行完毕后返回给我们的值,它会被保存在CallableStatement这个类里面,
//然后我们可以根据传入参数时所在的位置,这个位置就是传入的数组参下标+1去取存储过程返回给我们的值
else {
cs.registerOutParameter(2, java.sql.Types.VARCHAR); } } cs.execute();
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{ }
return cs;
}
二、调用方法的代码
/*调用带output参数的存储过程*/
//下面就是我们组合的参数,其中第一个是存储过程所需参数,第二个""没有赋值的参数就对应存储过程中的输出参数,就是我们需要的返回值
String[] sqlParameter=new String[]{"hellow",""};
//调用存储过程的的字符串
String executString="call outputProcudure(?,?)";
//调用存储过程的的字符串 outPutProcudure就是我们的存储过程名称,然后两个?表示两个参数,1是我们参数的参数,第二是我们存储过程处理完后返回的值
CallableStatement proReturnData=MySqlHepler.callProcInputAndOutPut(executString, sqlParameter);
try {
//取值 由于带OUT参数的返回值在我们存储过程中参数的位置是第二位所以我们 使用GETINT(2),接着我会贴存储过程
int returnValue= proReturnData.getInt(2);
if (returnValue==1) {
String groupAlertString="返回值是:"+returnValue+"--->插入成功.";
out.println(groupAlertString);
}
else
{
String groupAlertString="返回值是:"+returnValue+"--->插入失败,该用户名已经存在.";
out.println(groupAlertString);
} } catch (SQLException e) { e.printStackTrace();
}
三:存储过程
这里我详细说下:这个调用的存储过程执行的步骤很简单,就是传入一个名称,然后判断数据库中是否有相同名称的人员,如果有
就返回2(不插入),如果没就返回1(表示我们以hellow为名称给数据库中增加了一条数据),这个步骤如果
是直接写SQL语句是必须写两条的,但是这里用到了存储过程,就只需要如此简单一步就处理了...,也许你觉得我这个例子举得不正确,
也许你还会想,我们可以将这个名称字段设置个主键啊,不就一个SQL语句就行了吗,呵呵 不过我这里说了,我只是举了这么一
简单的例子,SQL操作复杂逻辑的地方太多了。。...也许连带操作的有10步如果你写SQL语句就需要10次访问数据,那么这时候
你再来看这个例子。你会觉得是多么的让你愉快.
下面贴存储过程的图:
三:执行效果
第一次调用存储过程截图
第二次调用存储过程截图
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。
java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)的更多相关文章
- javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量
定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ...
- Hibernate调用带有输入参数,输出参数为cursor的存储过程
一.Oracle创建表及存储过程 1.创建表T_MONITOR_DEVICE 创建后的表结构 2.创建存储过程 create or replace procedure ProcTestNew(v_mo ...
- Android JNI 自定义对象为参数和返回值
ndroid JNI 提供了很强大的支持,不仅可以采用基本类型做为参数和返回值,同时也支持自定义对象做为参数和返回值,以下举例说明. 一.定义作为输入和返回的自定义类 (仅提供两个简单类型和一个打印函 ...
- C#秘密武器之多线程——参数与返回值
线程函数要么没有参数,要么只能有一个object参数,而且均没有返回值,这样就大大降低了程序的灵活性,其实我们想要的是能像普通方法一样正常使用参数和返回值!能不能实现这个需求呢?下面就介绍两种方法 一 ...
- C#多线程函数如何传参数和返回值
详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统. C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...
- Java加载jar文件并调用jar文件当中有参数和返回值的方法
在工作当中经常遇到反编译后的jar文件,并要传入参数了解其中的某些方法的输出,想到Java里面的反射可以实现加载jar文件并调用其中的方法来达到自己的目的.就写了个Demo代码. 以下的类可以编译生成 ...
- Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出
主要拦截前端或后天的请求,打印请求方法参数.返回值.耗时.异常的日志.方便开发调试,能很快定位到问题出现在哪个方法中. 前端请求拦截,mvc的拦截器 import java.util.Date; im ...
- 编写Java程序_定义两个方法,实现奇数偶数的判断,并计算和(有参数有返回值方法)
需求说明: 定义两个方法,在控制台输入一个数字,这两个方法可以求出1到该数字之间所有偶数之和.奇数之和,并将对应结果和返回.在main方法中调用该方法,并在控制台打印出结果.(有参数有返回值方法) 运 ...
- paip.java 多线程参数以及返回值Future FutureTask 的使用.
paip.java 多线程参数以及返回值Future FutureTask 的使用. 在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是vo ...
随机推荐
- Kafka入门初探+伪集群部署
Kafka是目前非常流行的消息队列中间件,常用于做普通的消息队列.网站的活性数据分析(PV.流量.点击量等).日志的搜集(对接大数据存储引擎做离线分析). 全部内容来自网络,可信度有待考证!如有问题, ...
- Atitit 图像处理 灰度图片 灰度化的原理与实现
Atitit 图像处理 灰度图片 灰度化的原理与实现 24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图 ...
- Atitit java jsp 新的tag技术
Atitit java jsp 新的tag技术 1.1. Tag Files vs 原生写 SimpleTag 比较麻烦的 JSP 1.x 允许 Web 开发人员创建 Java 组件(称为标记处 ...
- c#设计模式-观察者模式
Observer 与 Subject 互为耦合,但是这种耦合的双方都依赖于抽象,而不依赖于具体. 一.观察者模式 目的 我们都知道解决一个问题有N种解决方式,但在面向对象的设计中如何能做到“高内聚,低 ...
- Ubuntu16配置静态IP
一.静态IP地址配置 sudo vi /etc/network/interfaces 然后按照如下格式修改: 注意这里的网卡名字是ens33 auto lo iface lo inet loopbac ...
- 快速入门系列--深入理解C#
C#语言在近些年得到了长足的方法,代码风格越来越简洁美观,例如常用的泛型及其约束.可空类型.隐式类型.匿名类型和委托等,通过下面的表格可以对这部分相对简单的特性的使用有一个初步的了解. 特性 示例 泛 ...
- 让BI告诉你:圣诞老人去哪了?
刚看到一篇关于圣诞节BI分析的文章,觉得很有意思,特来翻译了下和大家一起分享(可惜的是文章发布的时间有点久). 伴随着圣诞节即将到来的日子,POWER BI团队来回答大家最为关注的一个问题:圣诞老人到 ...
- Nginx配置网站适配PC和手机
考虑到网站的在多种设备下的兼容性,有很多网站会有手机版和电脑版两个版本.访问同一个网站URL,当服务端识别出用户使用电脑访问,就打开电脑版的页面,用户如果使用手机访问,则会得到手机版的页面. 1.判断 ...
- C#调用Couchbase中的Memcached缓存
安装服务端 服务端下载地址:http://www.couchbase.com/download 选择适合自己的进行下载安装就可以了,我这里选择的是Win7 64. 服务端安装完后,如果成功了,那么在浏 ...
- Deep learning:四十九(RNN-RBM简单理解)
前言: 本文主要是bengio的deep learning tutorial教程主页中最后一个sample:rnn-rbm in polyphonic music. 即用RNN-RBM来model复调 ...