一、Java如何实现对存储过程的调用:

A:不带输出参数的

create procedure getsum
@n int =0<--此处为参数-->
as
declare @sum int<--定义变量-->
declare @i int
set @sum=0
set @i=0
while @i<=@n begin
set @sum=@sum+@i
set @i=@i+1
end
print 'the sum is '+ltrim(rtrim(str(@sum))) 

在SQL中执行:

exec getsum 100

在JAVA中调用:

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

import java.sql.*;
public class ProcedureTest
{
public static void main(String args[]) throws Exception
{
//加载驱动
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//获得连接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");  //创建存储过程的对象
CallableStatement c=conn.prepareCall("{call getsum(?)}");  //给存储过程的参数设置值
c.setInt(1,100); //将第一个参数的值设置成100  //执行存储过程
c.execute();
conn.close();
}
}  

B:带输出参数的

1:返回int

alter procedure getsum
@n int =0,
@result int output
as
declare @sum int
declare @i int
set @sum=0
set @i=0
while @i<=@n begin
set @sum=@sum+@i
set @i=@i+1
end
set @result=@sum 

在查询分析器中执行:

declare @myResult int
exec getsum 100,@myResult output
print @myResult 

在JAVA中调用:

import java.sql.*;
public class ProcedureTest
{
public static void main(String args[]) throws Exception
{
//加载驱动
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//获得连接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");  //创建存储过程的对象
CallableStatement c=conn.prepareCall("{call getsum(?,?)}");  //给存储过程的第一个参数设置值
c.setInt(1,100);  //注册存储过程的第二个参数
c.registerOutParameter(2,java.sql.Types.INTEGER);  //执行存储过程
c.execute();  //得到存储过程的输出参数值
System.out.println (c.getInt(2));
conn.close();
}
}  

2:返回varchar

存储过程带游标:

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

create procedure CursorIntoProcedure
@pname varchar(8000) output
as
--定义游标
declare cur cursor for select orderid from orders
--定义一个变量来接收游标的值
declare @v varchar(5)
--打开游标
open cur
set @pname=''--给@pname初值
--提取游标的值
fetch next from cur into @v
while @@fetch_status=0
begin set @pname=@pname+';'+@v
fetch next from cur into @v
end
print @pname
--关闭游标
close cur
--销毁游标
deallocate cur 

执行存储过程:

exec CursorIntoProcedure '' 

JAVA调用:

import java.sql.*;
public class ProcedureTest
{
public static void main(String args[]) throws Exception
{
//加载驱动
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//获得连接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
CallableStatement c=conn.prepareCall("{call CursorIntoProcedure(?)}");  c.registerOutParameter(1,java.sql.Types.VARCHAR);  c.execute();  System.out.println (c.getString(1));
conn.close();
}
}  

C:删除数据的存储过程

存储过程:

drop table 学生基本信息表
create table 学生基本信息表
(
StuID int primary key,
StuName varchar(10),
StuAddress varchar(20)
)
insert into 学生基本信息表 values(1,'三毛','wuhan')
insert into 学生基本信息表 values(2,'三毛','wuhan')
create table 学生成绩表
(
StuID int,
Chinese int,
PyhSics int
foreign key(StuID) references 学生基本信息表(StuID)
on delete cascade
on update cascade
)
insert into 学生成绩表 values(1,99,100)
insert into 学生成绩表 values(2,99,100) 

创建存储过程:

create procedure delePro
@StuID int
as
delete from 学生基本信息表 where StuID=@StuID
--创建完毕
exec delePro 1 --执行存储过程
--创建存储过程
create procedure selePro
as
select * from 学生基本信息表
--创建完毕
exec selePro --执行存储过程 

在JAVA中调用:

import java.sql.*;
public class ProcedureTest
{
public static void main(String args[]) throws Exception
{
//加载驱动
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//获得连接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");  //创建存储过程的对象
CallableStatement c=conn.prepareCall("{call delePro(?)}");  c.setInt(1,1);  c.execute();  c=conn.prepareCall("{call selePro}");
ResultSet rs=c.executeQuery();  while(rs.next())
{
String Stu=rs.getString("StuID");
String name=rs.getString("StuName");
String add=rs.getString("StuAddress");  System.out.println ("学号:"+" "+"姓名:"+" "+"地址");
System.out.println (Stu+" "+name+" "+add);
}
c.close();
}
} 

D:修改数据的存储过程

创建存储过程:

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

执行存储过程:

exec ModPro 2,'四毛' 

JAVA调用存储过程:

import java.sql.*;
public class ProcedureTest
{
public static void main(String args[]) throws Exception
{
//加载驱动
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//获得连接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");  //创建存储过程的对象
CallableStatement c=conn.prepareCall("{call ModPro(?,?)}");  c.setInt(1,2);
c.setString(2,"美女");  c.execute();  c=conn.prepareCall("{call selePro}");
ResultSet rs=c.executeQuery();  while(rs.next())
{
String Stu=rs.getString("StuID");
String name=rs.getString("StuName");
String add=rs.getString("StuAddress");  System.out.println ("学号:"+" "+"姓名:"+" "+"地址");
System.out.println (Stu+" "+name+" "+add);
}
c.close();
}
} 

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

存储过程:

create procedure FindCusts
@cust varchar(10)
as
select customerid from orders where customerid
like '%'+@cust+'%' 

执行:

execute FindCusts 'alfki' 

在JAVA中调用:

import java.sql.*;
public class ProcedureTest
{
public static void main(String args[]) throws Exception
{
//加载驱动
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//获得连接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");  //创建存储过程的对象
CallableStatement c=conn.prepareCall("{call FindCusts(?)}");
c.setString(1,"Tom");  ResultSet rs=c.executeQuery();  while(rs.next())
{
String cust=rs.getString("customerid");
System.out.println (cust);
}
c.close();
}
} 

F:增加数据的存储过程

存储过程:

create procedure InsertPro
@StuID int,
@StuName varchar(10),
@StuAddress varchar(20)
as
insert into 学生基本信息表 values(@StuID,@StuName,@StuAddress)

调用存储过程:

exec InsertPro 5,'555','555' 

在JAVA中执行:

import java.sql.*;
public class ProcedureTest
{
public static void main(String args[]) throws Exception
{
//加载驱动
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//获得连接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");  //创建存储过程的对象
CallableStatement c=conn.prepareCall("{call InsertPro(?,?,?)}");
c.setInt(1,6);
c.setString(2,"Liu");
c.setString(3,"wuhan");  c.execute();  c=conn.prepareCall("{call selePro}");
ResultSet rs=c.executeQuery();  while(rs.next())
{
String stuid=rs.getString("StuID");
String name=rs.getString("StuName");
String address=rs.getString("StuAddress");
System.out.println (stuid+" "+name+" "+address);
}
c.close();
}
} 

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

import java.sql.*;
public class ProcedureTest
{
public static void main(String args[]) throws Exception
{
//加载驱动
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//获得连接
Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");  Statement stmt=conn.createStatement();
//在JAVA中创建存储过程
stmt.executeUpdate("create procedure OOP as select * from 学生成绩表");  CallableStatement c=conn.prepareCall("{call OOP}");  ResultSet rs=c.executeQuery();
while(rs.next())
{
String chinese=rs.getString("Chinese");  System.out.println (chinese);
}
conn.close();  }
} 

原文链接:http://technicalsearch.iteye.com/blog/1433293

转载于:https://www.cnblogs.com/davidwang456/p/4094874.html

Java对存储过程的调用方法 --转载相关推荐

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

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

  2. mysql数据库存储过程及调用方法

    mysql数据库存储过程及调用方法 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出.6.0不仅支持大型数据库如oracle等的绝大部分功 能,如存储过程.视图.触发 ...

  3. JAVA学习日志 关于调用方法、生成对象的例子。还是用数字卦程序修改

    今天学习如何调用方法,生成,建立对象.将程序在原数字卦程序里做了很多修改.多了一个CalculateData对象,作为存储卦象信息,增加了名字,便于以后学会存储之后多人进行记录.输入部分从原来的nex ...

  4. java methodtype_java基于MethodHandle调用方法

    MethodHandle是jdk1.7加入的新特性,可以提供与反射类似的能力,但是其性能上要优于反射 添加测试类 public class MethodHandleTest { public Obje ...

  5. java没有对象可以调用方法吗_在没有括号的情况下调用Java中的新对象的方法:操作顺序违规?...

    这是因为Java语言的定义如何.运算符的优先级只有在两种不同的方式解析相同的词法序列时才起作用,但事实并非如此. 为什么? 因为分配在 Primary: ... new Creator 而方法调用定义 ...

  6. sql 系统 存储过程的使用方法 转载

    声明:本文仅用于教学目的,如果因为本文造成的攻击后果本人概不负责.因为发觉其危害过大,原文已经经过大量删减及修改,即使这样本文的危害性仍然很大,所以请大家不要对国内的站点做任何具有破坏性的操作.考虑再 ...

  7. 几种存储过程的调用方法

    1.查询分析器中 CREATE PROC COUNTJIANGJIN ( @gzyear char(4), @gzmonth char(2), @gzzhanghao char(18), @sumkh ...

  8. java mysql存储过程_JAVA调用MySQL存储过程

    展开全部 java代码copy: Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager .g ...

  9. java 摄像头 win7_JAVA摄像头调用方法_实例源码介绍—Win7

    JAVA摄像头调用_实例源码介绍-Win7. 本人菜鸟级人物,由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceMa ...

最新文章

  1. 组织软件测试中应当避免的几个常见现象
  2. CSTrackV2解读
  3. 从sqlserver中数据写入mysql_从SQL server数据库导入Mysql数据库的体验
  4. 前端学习(3013):vue+element今日头条管理--手动触发验证
  5. 从微信浏览器,调起本地应用,最简单的解决方案
  6. go sqlite mysql_Go语言中使用SQLite数据库
  7. 终于有了自己的域名了
  8. java md5方法 for Android
  9. 物联网数据的采集与处理
  10. 7 在使用计算机时要注意防 .,Windows7系统使用移动硬盘的七大注意事项
  11. 从苹果供应商看2018年全球电子产业链的中国势力变化
  12. 服务器系统含5用户是什么意思,你好,想问下,我现在用的是T1商贸宝批发零售版5用户的,现在服务器是用WIN7,32位的系统,如果我的服务器升级为WIN10系统可不可以用?...
  13. vue简化技巧之‘hook:生命周期‘
  14. 电视盒子系统是安卓还是yunOS,三招快速弄清
  15. sum if函数的精妙及高级用法:
  16. 数字图像处理与Python实现-图像几何变换-图像金字塔
  17. filco蓝牙不好用_filco minila air的蓝牙连接稳定吗?
  18. 3-maven学习-学习创建maven的依赖属性
  19. c#用串口传输二进制文件 xmodem协议
  20. 安卓开发(2):基本UI界面设计

热门文章

  1. nginx.redis.mysql_nginx,redis_mysql和redis效率问题,nginx,redis,mysql,php - phpStudy
  2. linux dup用法,Unix_Linux
  3. java rest tomcat_java – REST服务返回HTTP 204(Tomcat / Linux)
  4. 突破Windows下select64的限制
  5. 互斥信号量的原理与创建
  6. add多个文件 git 文件夹_利用 git 提取文件夹下多个特定文件里的内容写到特定文件内...
  7. android:shareduserid获取资源,关于 android:sharedUserId=android.uid.system
  8. android 之多线程详解
  9. Fragment碎片的基本使用(手机平板需要更好地兼容)
  10. python的模块、包、库区别。导入包/模块的方式