`
lengrenhanbing
  • 浏览: 47891 次
  • 性别: Icon_minigender_1
  • 来自: 泰安
社区版块
存档分类
最新评论

Java对存储过程的调用方法

 
阅读更多

一、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

 

分享到:
评论

相关推荐

    java 调用存储过程

    在Java编程中,调用存储过程是连接数据库并执行预定义SQL代码的一种常见方式。存储过程是由数据库管理系统(如MySQL, Oracle, SQL Server等)编译并存储的一组操作,可以包含复杂的逻辑、条件判断、循环等,提高数据...

    java调用存储过程

    java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程

    java调用存储过程(含out参数)

    在Java编程中,调用数据库的存储过程是常见的任务,特别是在处理复杂的业务逻辑或需要高效数据操作时。本文将详细讲解如何在Java中调用含有`OUT`参数的存储过程,帮助开发者解决这类问题。 首先,理解存储过程的...

    java 调用存储过程总结

    java 调用存储过程 总结 创建表 创建存储过程 创建java程序调用

    JAVA调用存储过程

    ### JAVA调用存储过程知识点详解 #### 一、无结果集返回的存储过程调用 在Java中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...

    Java调用存储过程的2种方法

    ### Java调用存储过程的两种方法 在Java中调用数据库中的存储过程是常见的操作之一,这不仅可以提高程序性能和代码可维护性,还可以更好地利用数据库的功能。根据提供的标题、描述以及部分内容,本文将详细介绍Java...

    java调用oracle存储过程或者函数

    在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...

    Java调用存储过程--传入集合参数

    ### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...

    java调用存储过程实例

    在Java中,可以使用类似的方法调用此存储过程,但需要额外处理游标的结果。 #### 结论 Java调用存储过程是实现高效数据库交互的关键技术。通过正确设置参数、执行存储过程并管理资源,可以在Java应用中充分利用存储...

    Java实现调用MySQL存储过程详解

    在Java应用程序中,可以通过Java Database Connectivity (JDBC) API来调用MySQL的存储过程。 首先,确保你已经安装了MySQL数据库,并且在数据库中创建了一个或多个存储过程。例如,`findAllBook`、`pro_test`和`pro...

    Java调用Oracle存储过程的方法

    以上就是使用Java调用Oracle存储过程的方法,包括处理基本类型返回值和游标返回值。在实际开发中,可能还需要处理异常、事务管理等问题,确保代码的健壮性和可维护性。同时,为了提高性能,建议使用连接池管理数据库...

    java 调用db2存储过程

    本文将详细介绍 Java 调用 DB2 存储过程的方法和步骤,并提供了详细的代码示例。 一、创建存储过程 在 DB2 中,创建存储过程需要使用 CREATE PROCEDURE 语句。例如,创建一个无参存储过程可以使用以下语句: ```...

    Java调用数据库存储过程[mysql测试通过]

    在Java编程中,调用数据库存储过程是一种常见的操作,特别是在处理复杂的业务逻辑或者批量数据操作时。本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先...

    springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、java动态调用or

    能不能写个动态的业务,只输入存储过程名称,自动...只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载

    java调用存储过程返回数组

    总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...

    Java调用Mysql存储过程

    在Java编程中,调用MySQL存储过程是一种常见的数据库交互方式,尤其在处理复杂业务逻辑或大量数据操作时。本文将详细讲解如何通过Java来执行MySQL的存储过程。 首先,了解存储过程的基本概念。存储过程是预编译在...

Global site tag (gtag.js) - Google Analytics