[转帖]JAVA中对存储过程的调用方法(引)_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4400 | 回复: 0   主题: [转帖]JAVA中对存储过程的调用方法(引)        下一篇 
fozhyn
注册用户
等级:上士
经验:317
发帖:101
精华:0
注册:2011-10-18
状态:离线
发送短消息息给fozhyn 加好友    发送短消息息给fozhyn 发消息
发表于: IP:您无权察看 2011-10-19 15:31:29 | [全部帖] [楼主帖] 楼主

一: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();
      }
}




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论