存储过程:procedure:就是一段可执行程序。这个程序运行在数据中。

Begin = {

End = }

If

Else

也可以接收参数。

1 定义一个procedure:

CREATE PROCEDURE proc1()
BEGIN ――{
SELECT * FROM users;
END // ―― } DELIMITER ; CALL proc1();

2 定义一个接收参数的:

DELIMITER $$
CREATE PROCEDURE proc2(IN _id VARCHAR(),IN _nm VARCHAR())
BEGIN
INSERT INTO users(id,NAME) VALUES(_id,_nm);
END $$ CALL proc2('U003','Rose');

3 定义一个返回类型的参数:

DELIMITER $$
CREATE PROCEDURE proc3(IN _id VARCHAR(),IN _nm VARCHAR(),OUT _size INT)
BEGIN
INSERT INTO users(id,NAME) VALUES(_id,_nm);
SELECT COUNT() INTO _size FROM users;
IF(_size=) THEN
INSERT INTO users VALUES('U0000','ddd','ddddd');
END IF;
END $$ CALL proc3('U002882','Rose',@wj);
SELECT @wj;

在Java代码中调用Procedure

package cn.hx.demo;

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Types;

import org.junit.Test;

import cn.itcast.utils.DataSourceUtils;

public class ProceDemo {

@Test

public void proc1() throws Exception{

//dbutils不提供调用存储过程的能力

Connection con = DataSourceUtils.getDatasSource().getConnection();

//获取调用过程的对象

CallableStatement cs =

con.prepareCall("{call proc1()}");

//执行

boolean boo = cs.execute();//如果返回true,指最后一句执行的是select语句

if(boo){

ResultSet rs = cs.getResultSet();

while(rs.next()){

System.err.println(rs.getString("name"));

}

}

con.close();

}

@Test

public void proc2() throws Exception{

Connection con = DataSourceUtils.getDatasSource().getConnection();

//获取调用过程的对象

CallableStatement cs =

con.prepareCall("{call proc2(?,?)}");

cs.setString(1,"UAAA");

cs.setString(2, "11");

boolean boo = cs.execute();

System.err.println(boo);

con.close();

}

@Test

public void proc3() throws Exception{

Connection con = DataSourceUtils.getDatasSource().getConnection();

//获取调用过程的对象

CallableStatement cs =

con.prepareCall("{call proc5(?,?,?)}");

cs.setString(1,"UBDDB");

cs.setString(2, "张三");

cs.registerOutParameter(3,Types.INTEGER);//--int,

boolean boo = cs.execute();

System.err.println(">>:"+boo);//true

//从call中获取返回的值

int size = cs.getInt(3);

System.err.println("行数:"+size);

if(boo){

ResultSet rs= cs.getResultSet();

rs.next();

int ss = rs.getInt(1);

System.err.println("sss:"+ss);

}

con.close();

}

@Test

public void proc6() throws Exception{

Connection con = DataSourceUtils.getDatasSource().getConnection();

//获取调用过程的对象

CallableStatement cs =

con.prepareCall("{call proc6(?,?,?,?)}");

cs.setString(1,"UBafadsB");

cs.setString(2, "张三");

cs.registerOutParameter(3,Types.INTEGER);//--int,

cs.registerOutParameter(4, Types.INTEGER);

boolean boo = cs.execute();

System.err.println(">>:"+boo);//faluse

//从call中获取返回的值

int size = cs.getInt(3);

int _s = cs.getInt(4);

System.err.println("行数:"+size+","+_s);

con.close();

}

}

java—数据存储过程 (54)的更多相关文章

  1. Java对存储过程的调用方法 --转载

    一.Java如何实现对存储过程的调用: A:不带输出参数的 create procedure getsum <--此处为参数--> as declare @sum int<--定义变 ...

  2. Java对存储过程的调用方法

    本文将介绍Java怎样实现对存数过程的调用方法,作者用了几个样例进行了具体的说明,简单明了,很适合刚開始学习的人. 一.Java怎样实现对存储过程的调用: A:不带输出參数的 create proce ...

  3. Java 数据持久化系列之JDBC

    前段时间小冰在工作中遇到了一系列关于数据持久化的问题,在排查问题时发现自己对 Java 后端的数据持久化框架的原理都不太了解,只有不断试错,因此走了很多弯路.于是下定决心,集中精力学习了持久化相关框架 ...

  4. JAVA对存储过程的调用方法(本文源于网络)

    博客分类: java java存储过程sql  一:Java如何实现对存储过程的调用:   A:不带输出参数的   ---------------不带输出参数的-------------------- ...

  5. java调用存储过程(stored procedures)的HelloWorld例子

    1.java调用存储过程(stored procedures)的HelloWorld程序 有点数据 库基础的人都知道.存储过程(stored procedures)和java没什么关系.它是一段纯粹的 ...

  6. Java数据持久层

    一.前言 1.持久层 Java数据持久层,其本身是为了实现与数据源进行数据交互的存在,其目的是通过分层架构风格,进行应用&数据的解耦. 我从整体角度,依次阐述JDBC.Mybatis.Myba ...

  7. JSONObject.fromObject(map)(JSON与JAVA数据的转换)

    JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...

  8. 关于JAVA数据储存

    关于JAVA数据储存: 在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register) 这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以 ...

  9. Java数据类型和MySql数据类型对应一览

    类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N ...

随机推荐

  1. Android中的WebView进行直接加载网页(要注意解决权限问题)

    我们都知道Android的网络功能很不错,当然Android中WebView组件也挺不错,可以直接进行加载网页,我们可以把这个看做一个小型的浏览器\ [注]以下的一些内容我翻译了一下文档,可能有些翻译 ...

  2. FCCMBBTN.RES

    [ilink32 Error] Error: Unable to open file 'FCCMBBTN.RES' 用到了fc控件 添加路径到LibPath即可. 1st\1stClassStudio ...

  3. spring mvc 映射器和适配器

    映射器和适配器 1.非注解的映射器和适配器 a. 入门程序中的单个映射 BeanNameUrlHandlerMapping SimpleControllerHandlerAdapter b.另一种ma ...

  4. css常用属性总结:背景background上篇

    1.在前面一节中我们提到了color的使用,类似于前景色,我们同样可以为元素的背景声明颜色,可以使用background-color属性, 它接受任何有效的颜色值.先看看它的语法. backgroun ...

  5. Varint 数值压缩

    [Varint 数值压缩] Varint 是一种紧凑的表示数字的方法.它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数.这能减少用来表示数字的字节数.比如对于 int32 类型的数字,一 ...

  6. the difference between fopen&open

    [the difference between fopen&open] fopen是C标准API,open是linux系统调用,层次上fopen基于open,在其之上.fopen有缓存,ope ...

  7. oralce 知识

    原文链接 附录:1.SQL 简介2.SQL 操作符3.Oracle 常用数据类型4.Oracle 函数5.[转] Oracle 常用SQL语法 字符串函数LENGTH()    字符长度LENTTHB ...

  8. 根据车辆品牌获取品牌所属公司,车标logo,创建年份等基本信息

    接口:http://api.besttool.cn/?c=Car&a=brand 请求方式:post 参数: appid 请联系博主QQ987332767获取,注明车标接口,测试appid: ...

  9. Qt Image Water Marker

    QString str = "input.jpg"; if(!img.load(str)){ return; } QImage mark(img.width()/2,img.hei ...

  10. Linux命令:cp (copy)复制文件或目录

    复制文件,只有源文件较目的文件的修改时间新时,才复制文件     cp -u -v file1 file2 .将文件file1复制成文件file2     cp file1 file2 .采用交互方式 ...