本文将介绍Java怎样实现对存数过程的调用方法,作者用了几个样例进行了具体的说明,简单明了,很适合刚開始学习的人。

一、Java怎样实现对存储过程的调用:

A:不带输出參数的

  1. create procedure getsum
  2. @n int =0<--此处为參数-->
  3. as
  4. declare @sum int<--定义变量-->
  5. declare @i int
  6. set @sum=0
  7. set @i=0
  8. while @i<=@n begin
  9. set @sum=@sum+@i
  10. set @i=@i+1
  11. end
  12. print 'the sum is '+ltrim(rtrim(str(@sum)))

在SQL中运行:

exec getsum 100

在JAVA中调用:

JAVA能够调用 可是在JAVA程序却不能去显示该存储过程的结果 由于上面的存储过程的參数类型int 传递方式是in(按值)方式

  1. import java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //载入驱动
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //获得连接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //创建存储过程的对象
  11. CallableStatement c=conn.prepareCall("{call getsum(?)}");
  12. //给存储过程的參数设置值
  13. c.setInt(1,100); //将第一个參数的值设置成100
  14. //运行存储过程
  15. c.execute();
  16. conn.close();
  17. }
  18. }

B:带输出參数的

1:返回int

  1. alter procedure getsum
  2. @n int =0,
  3. @result int output
  4. as
  5. declare @sum int
  6. declare @i int
  7. set @sum=0
  8. set @i=0
  9. while @i<=@n begin
  10. set @sum=@sum+@i
  11. set @i=@i+1
  12. end
  13. set @result=@sum

在查询分析器中运行:

  1. declare @myResult int
  2. exec getsum 100,@myResult output
  3. print @myResult

在JAVA中调用:

  1. import java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //载入驱动
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //获得连接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //创建存储过程的对象
  11. CallableStatement c=conn.prepareCall("{call getsum(?,?)}");
  12. //给存储过程的第一个參数设置值
  13. c.setInt(1,100);
  14. //注冊存储过程的第二个參数
  15. c.registerOutParameter(2,java.sql.Types.INTEGER);
  16. //运行存储过程
  17. c.execute();
  18. //得到存储过程的输出參数值
  19. System.out.println (c.getInt(2));
  20. conn.close();
  21. }
  22. }

2:返回varchar

存储过程带游标:

在存储过程中带游标 使用游标不停的遍历orderid

  1. create procedure CursorIntoProcedure
  2. @pname varchar(8000) output
  3. as
  4. --定义游标
  5. declare cur cursor for select orderid from orders
  6. --定义一个变量来接收游标的值
  7. declare @v varchar(5)
  8. --打开游标
  9. open cur
  10. set @pname=''--给@pname初值
  11. --提取游标的值
  12. fetch next from cur into @v
  13. while @@fetch_status=0
  14. begin
  15. set @pname=@pname+';'+@v
  16. fetch next from cur into @v
  17. end
  18. print @pname
  19. --关闭游标
  20. close cur
  21. --销毁游标
  22. deallocate cur

运行存储过程:

  1. exec CursorIntoProcedure ''

JAVA调用:

  1. import java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //载入驱动
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //获得连接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. CallableStatement c=conn.prepareCall("{call CursorIntoProcedure(?)}");
  11. c.registerOutParameter(1,java.sql.Types.VARCHAR);
  12. c.execute();
  13. System.out.println (c.getString(1));
  14. conn.close();
  15. }
  16. }

C:删除数据的存储过程

存储过程:

  1. drop table 学生基本信息表
  2. create table 学生基本信息表
  3. (
  4. StuID int primary key,
  5. StuName varchar(10),
  6. StuAddress varchar(20)
  7. )
  8. insert into 学生基本信息表 values(1,'三毛','wuhan')
  9. insert into 学生基本信息表 values(2,'三毛','wuhan')
  10. create table 学生成绩表
  11. (
  12. StuID int,
  13. Chinese int,
  14. PyhSics int
  15. foreign key(StuID) references 学生基本信息表(StuID)
  16. on delete cascade
  17. on update cascade
  18. )
  19. insert into 学生成绩表 values(1,99,100)
  20. insert into 学生成绩表 values(2,99,100)

创建存储过程:

  1. create procedure delePro
  2. @StuID int
  3. as
  4. delete from 学生基本信息表 where StuID=@StuID
  5. --创建完成
  6. exec delePro 1 --运行存储过程
  7. --创建存储过程
  8. create procedure selePro
  9. as
  10. select * from 学生基本信息表
  11. --创建完成
  12. exec selePro --运行存储过程

在JAVA中调用:

  1. import java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //载入驱动
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //获得连接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //创建存储过程的对象
  11. CallableStatement c=conn.prepareCall("{call delePro(?)}");
  12. c.setInt(1,1);
  13. c.execute();
  14. c=conn.prepareCall("{call selePro}");
  15. ResultSet rs=c.executeQuery();
  16. while(rs.next())
  17. {
  18. String Stu=rs.getString("StuID");
  19. String name=rs.getString("StuName");
  20. String add=rs.getString("StuAddress");
  21. System.out.println ("学号:"+" "+"姓名:"+" "+"地址");
  22. System.out.println (Stu+" "+name+" "+add);
  23. }
  24. c.close();
  25. }
  26. }

D:改动数据的存储过程

创建存储过程:

  1. create procedure ModPro
  2. @StuID int,
  3. @StuName varchar(10)
  4. as
  5. update 学生基本信息表 set StuName=@StuName where StuID=@StuID

运行存储过程:

  1. exec ModPro 2,'四毛'

JAVA调用存储过程:

  1. import java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //载入驱动
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //获得连接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //创建存储过程的对象
  11. CallableStatement c=conn.prepareCall("{call ModPro(?,?)}");
  12. c.setInt(1,2);
  13. c.setString(2,"美女");
  14. c.execute();
  15. c=conn.prepareCall("{call selePro}");
  16. ResultSet rs=c.executeQuery();
  17. while(rs.next())
  18. {
  19. String Stu=rs.getString("StuID");
  20. String name=rs.getString("StuName");
  21. String add=rs.getString("StuAddress");
  22. System.out.println ("学号:"+" "+"姓名:"+" "+"地址");
  23. System.out.println (Stu+" "+name+" "+add);
  24. }
  25. c.close();
  26. }
  27. }

E:查询数据的存储过程(模糊查询)

存储过程:

  1. create procedure FindCusts
  2. @cust varchar(10)
  3. as
  4. select customerid from orders where customerid
  5. like '%'+@cust+'%'

运行:

  1. execute FindCusts 'alfki'

在JAVA中调用:

  1. import java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //载入驱动
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //获得连接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //创建存储过程的对象
  11. CallableStatement c=conn.prepareCall("{call FindCusts(?)}");
  12. c.setString(1,"Tom");
  13. ResultSet rs=c.executeQuery();
  14. while(rs.next())
  15. {
  16. String cust=rs.getString("customerid");
  17. System.out.println (cust);
  18. }
  19. c.close();
  20. }
  21. }

F:添加数据的存储过程

存储过程:

  1. create procedure InsertPro
  2. @StuID int,
  3. @StuName varchar(10),
  4. @StuAddress varchar(20)
  5. as
  6. insert into 学生基本信息表 values(@StuID,@StuName,@StuAddress)

调用存储过程:

  1. exec InsertPro 5,'555','555'

在JAVA中运行:

  1. import java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //载入驱动
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //获得连接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //创建存储过程的对象
  11. CallableStatement c=conn.prepareCall("{call InsertPro(?,?,?)}");
  12. c.setInt(1,6);
  13. c.setString(2,"Liu");
  14. c.setString(3,"wuhan");
  15. c.execute();
  16. c=conn.prepareCall("{call selePro}");
  17. ResultSet rs=c.executeQuery();
  18. while(rs.next())
  19. {
  20. String stuid=rs.getString("StuID");
  21. String name=rs.getString("StuName");
  22. String address=rs.getString("StuAddress");
  23. System.out.println (stuid+" "+name+" "+address);
  24. }
  25. c.close();
  26. }
  27. }

G:在JAVA中创建存储过程 而且在JAVA中直接调用

  1. import java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //载入驱动
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //获得连接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. Statement stmt=conn.createStatement();
  11. //在JAVA中创建存储过程
  12. stmt.executeUpdate("create procedure OOP as select * from 学生成绩表");
  13. CallableStatement c=conn.prepareCall("{call OOP}");
  14. ResultSet rs=c.executeQuery();
  15. while(rs.next())
  16. {
  17. String chinese=rs.getString("Chinese");
  18. System.out.println (chinese);
  19. }
  20. conn.close();
  21. }
  22. }

Java对存储过程的调用方法的更多相关文章

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

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

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

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

  3. MySql 存储过程及调用方法

    存储过程实例: DELIMITER $$drop procedure if exists ff $$CREATE /*[DEFINER = { user | CURRENT_USER }]*/ PRO ...

  4. 创建自己的java类库并加以调用方法

    第一次搞博客,心里有点发慌,记录一下:2018/2/1/   21:33 今天Think In Java第4版 中文版(英文看着可能很耗时),看到了6.1.3 定制工具库这一章节,之前作者调用自己的类 ...

  5. java对过反射调用方法

      public class InvokeTester { public InvokeTester() { } String str; public InvokeTester(String str) ...

  6. Java基础 throws 提示调用方法时要注意处理相关异常

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  7. C#调用JAVA(二)调用方法

    上期我们创建了jar包并放到了unity中,那么我们继续 如果您还没有看上一期请先看上一期,这是链接 C#调用JAVA(一)制作jar包 - 执著GodShadow - 博客园 (cnblogs.co ...

  8. mysql 自定义函数与自定义存储过程的调用方法

    存储过程:call  过程名(参数) 函数:      select  函数名(参数)

  9. Java基础(四)方法和数组

    一.方法 1.方法的定义 方法也叫函数,就是一个能独立完成某个功能的一段代码.方法可以看作一个整体. 语法: 修饰符 返回类型 方法名字(数据类型 变量名,数据类型 变量名,……[形式参数(0个到n个 ...

随机推荐

  1. 利用sendmsg和recvmsg来指定发送接口或者获取接收数据接口

    前言     sendmsg和recvmsg函数是一对相对下层的套接字发送.接受函数. 通过这对函数,我们能够设置或者取得数据包的一些额外的控制信息.这些信息中比較经常使用的就是本文要介绍的发送.接受 ...

  2. Applet 数字签名技术完全攻略

      这里说声对不起大家.毕竟2几年前,我想写这篇文章,但因为他才懒得一直没有写.同时也给自己的东西好.前些日子我老大让我又搞这个东西发现我曾经的资料没留,又凭着自己印象从新来过.但发现网上写的东西真的 ...

  3. 学习笔记 Android.mk 搜索自己主动

    最近一直Android.mk这是什么一个令人沮丧的夜晚,点击此处记录. ios你担心更多.不管那么多.xcode自己解决. 文本工具:MACVIM(文本编辑工具 很有用 你可以清楚地分辨tab 和Sp ...

  4. hdu 4464 水

    http://acm.hdu.edu.cn/showproblem.php?pid=4464 现场赛总会有水题,这就是最水的一道,预计也就是能当高校的上机题,保研用,呵呵~~~ #include &l ...

  5. arcmap坐标点生成线和面(更正版)

    一:本博客的脉络 (1 )做了例如以下更正:之前在网上搜到的结果是:arcmap坐标点生成线和面 ------ 注意该功能在ArcGIS10中没有了,当时自己也没有多想就转载了,再此做一下更正或者叫做 ...

  6. Jenkins详细安装与构建部署使用教程(转)

    Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布 ...

  7. poj 2478 Farey Sequence(欧拉函数是基于寻求筛法素数)

    http://poj.org/problem?id=2478 求欧拉函数的模板. 初涉欧拉函数,先学一学它主要的性质. 1.欧拉函数是求小于n且和n互质(包含1)的正整数的个数. 记为φ(n). 2. ...

  8. log4net使用特定的解释

    说明:该程序演示如何使用log4net记录日志信息. log4net它是-known开源组件的日志记录功能.使用log4net可以很容易地将信息记录到文件.控制台.Windows事件日志和数据库(含有 ...

  9. Unity3D方法来隐藏和显示对象

    Unity3D作 在使用unity3d开发游戏的过程中.我们经常会遇到须要隐藏或者显示的操作,针对这一点,以下做了一些总结. 一.设置Renderer状态 在游戏的开发中,全部可以被渲染的物体都包括有 ...

  10. NYOJ 300 &amp;&amp; hdu 2276 Kiki &amp; Little Kiki 2 (矩阵高速功率)

    pid=300">Kiki & Little Kiki 2 时间限制:5000 ms  |  内存限制:65535 KB 难度:4 描写叙述 There are n light ...