本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址

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 调用带有输入参数和返回值的存储过程(原创)的更多相关文章

  1. javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量

    定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ...

  2. Hibernate调用带有输入参数,输出参数为cursor的存储过程

    一.Oracle创建表及存储过程 1.创建表T_MONITOR_DEVICE 创建后的表结构 2.创建存储过程 create or replace procedure ProcTestNew(v_mo ...

  3. Android JNI 自定义对象为参数和返回值

    ndroid JNI 提供了很强大的支持,不仅可以采用基本类型做为参数和返回值,同时也支持自定义对象做为参数和返回值,以下举例说明. 一.定义作为输入和返回的自定义类 (仅提供两个简单类型和一个打印函 ...

  4. C#秘密武器之多线程——参数与返回值

    线程函数要么没有参数,要么只能有一个object参数,而且均没有返回值,这样就大大降低了程序的灵活性,其实我们想要的是能像普通方法一样正常使用参数和返回值!能不能实现这个需求呢?下面就介绍两种方法 一 ...

  5. C#多线程函数如何传参数和返回值

          详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统.   C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...

  6. Java加载jar文件并调用jar文件当中有参数和返回值的方法

    在工作当中经常遇到反编译后的jar文件,并要传入参数了解其中的某些方法的输出,想到Java里面的反射可以实现加载jar文件并调用其中的方法来达到自己的目的.就写了个Demo代码. 以下的类可以编译生成 ...

  7. Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出

    主要拦截前端或后天的请求,打印请求方法参数.返回值.耗时.异常的日志.方便开发调试,能很快定位到问题出现在哪个方法中. 前端请求拦截,mvc的拦截器 import java.util.Date; im ...

  8. 编写Java程序_定义两个方法,实现奇数偶数的判断,并计算和(有参数有返回值方法)

    需求说明: 定义两个方法,在控制台输入一个数字,这两个方法可以求出1到该数字之间所有偶数之和.奇数之和,并将对应结果和返回.在main方法中调用该方法,并在控制台打印出结果.(有参数有返回值方法) 运 ...

  9. paip.java 多线程参数以及返回值Future FutureTask 的使用.

    paip.java 多线程参数以及返回值Future FutureTask 的使用. 在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是vo ...

随机推荐

  1. js 数组

    js中的数组类似与java中的容器 类型可以不同.长度可变 一.数组的声明 var arr1=new Array();//数组的声明一     var arr2=[1,2,3,true,new Dat ...

  2. easyui扩展正则验证,函数验证

    用easyui做业务系统,对于默认的几个验证规则,肯定是不够的,难免会增加几种规则.可是问题来了,往往是我们在开发会遇到很多各种各样的验证,时间久了才发现,这些扩展的正则无非就是添加一个正则验证规则, ...

  3. 【WP 8.1开发】上下文菜单

    在桌面系统中,别说是开发者,相信有资格考得过计算机一级的人都知道什么叫一下文菜单,或者叫右键菜单. 为了让操作更方便,在手机应用程序中,也应当有这样的菜单.上下文菜单之所以有”上下文“之说,是因为通常 ...

  4. WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要有三种实现方式 ...

  5. Codeforces Round #277(Div. 2) (A Calculating Function, B OR in Matrix, C Palindrome Transformation)

    #include<iostream> #include<cstring> #include<cstdio> /* 题意:计算f(n) = -1 + 2 -3 +4. ...

  6. poj3249Test for Job(记忆化搜索)

    /* 题意:给一个DAG图,n个节点,每个节点都对应一个值,入度为零的点走到出度为零的点,计算所有可能路径 经过节点值的和最大! 思路:记忆话搜索:也就是如果我们搜索到某一个节点的时候发现该节点已经存 ...

  7. LeetCode:3Sum_15

    LeetCOde:3Sum [问题再现] Given an array S of n integers, are there elements a, b, c in S such that a + b ...

  8. (高德地图)marker定位 bug 解决总结

    项目背景: 一个项目bug,项目中用到高德地图,默认打开页面会生成一个marker(下图红色icon),然后用户拖动marker到想要的位置,并且保存. 用户反映定位不准确,在当前页面编辑的位置,到后 ...

  9. Android数据库表的创建和数据升级操作

    之前的文章有提到,可以在xml文件中配置数据库信息:http://www.cnblogs.com/wenjiang/p/4492303.html,现在就讲如何利用这些信息类构建数据库. xml文件大概 ...

  10. 30天C#基础巩固-----序列化,集合

    关于集合的练习. ----->计算字符串每个字符出现的次数. Console.WriteLine("请输入?"); string input = Console.ReadLi ...