qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          Java對存儲過程的調(diào)用方法

           一、Java怎樣實現(xiàn)對存儲過程的調(diào)用:
            A:不帶輸出參數(shù)的
          create procedure getsum
          @n int =0<--此處為參數(shù)-->
          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中調(diào)用:
            JAVA能夠調(diào)用 可是在JAVA程序卻不能去顯示該存儲過程的結(jié)果 由于上面的存儲過程的參數(shù)類型int 傳遞方式是in(按值)方式
          import java.sql.*;
          public class ProcedureTest
          {
          public static void main(String args[]) throws Exception
          {
          //載入驅(qū)動
          DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
          //獲得連接
          Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
          //創(chuàng)建存儲過程的對象
          CallableStatement c=conn.prepareCall("{call getsum(?)}");
          //給存儲過程的參數(shù)設(shè)置值
          c.setInt(1,100); //將第一個參數(shù)的值設(shè)置成100
          //運行存儲過程
          c.execute();
          conn.close();
          }
          }
            B:帶輸出參數(shù)的
            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中調(diào)用:
          import java.sql.*;
          public class ProcedureTest
          {
          public static void main(String args[]) throws Exception
          {
          //載入驅(qū)動
          DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
          //獲得連接
          Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
          //創(chuàng)建存儲過程的對象
          CallableStatement c=conn.prepareCall("{call getsum(?,?)}");
          //給存儲過程的第一個參數(shù)設(shè)置值
          c.setInt(1,100);
          //注冊存儲過程的第二個參數(shù)
          c.registerOutParameter(2,java.sql.Types.INTEGER);
          //運行存儲過程
          c.execute();
          //得到存儲過程的輸出參數(shù)值
          System.out.println (c.getInt(2));
          conn.close();
          }
          }
            2:返回varchar
            存儲過程帶游標(biāo):
            在存儲過程中帶游標(biāo) 使用游標(biāo)不停的遍歷orderid
            create procedure CursorIntoProcedure
            @pname varchar(8000) output
            as
            --定義游標(biāo)
            declare cur cursor for select orderid from orders
            --定義一個變量來接收游標(biāo)的值
            declare @v varchar(5)
            --打開游標(biāo)
            open cur
            set @pname=''--給@pname初值
            --提取游標(biāo)的值
            fetch next from cur into @v
            while @@fetch_status=0
            begin
            set @pname=@pname+';'+@v
            fetch next from cur into @v
            end
            print @pname
            --關(guān)閉游標(biāo)
            close cur
            --銷毀游標(biāo)
            deallocate cur
            運行存儲過程:
            exec CursorIntoProcedure ''
            JAVA調(diào)用:
          import java.sql.*;
          public class ProcedureTest
          {
          public static void main(String args[]) throws Exception
          {
          //載入驅(qū)動
          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:刪除數(shù)據(jù)的存儲過程
            存儲過程:
          drop table 學(xué)生基本信息表
          create table 學(xué)生基本信息表
          (
          StuID int primary key,
          StuName varchar(10),
          StuAddress varchar(20)
          )
          insert into 學(xué)生基本信息表 values(1,'三毛','wuhan')
          insert into 學(xué)生基本信息表 values(2,'三毛','wuhan')
          create table 學(xué)生成績表
          (
          StuID int,
          Chinese int,
          PyhSics int
          foreign key(StuID) references 學(xué)生基本信息表(StuID)
          on delete cascade
          on update cascade
          )
          insert into 學(xué)生成績表 values(1,99,100)
          insert into 學(xué)生成績表 values(2,99,100)
            創(chuàng)建存儲過程:
            create procedure delePro
            @StuID int
            as
            delete from 學(xué)生基本信息表 where StuID=@StuID
            --創(chuàng)建完成
            exec delePro 1 --運行存儲過程
            --創(chuàng)建存儲過程
            create procedure selePro
            as
            select * from 學(xué)生基本信息表
            --創(chuàng)建完成
            exec selePro --運行存儲過程
            在JAVA中調(diào)用:
          import java.sql.*;
          public class ProcedureTest
          {
          public static void main(String args[]) throws Exception
          {
          //載入驅(qū)動
          DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
          //獲得連接
          Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
          //創(chuàng)建存儲過程的對象
          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 ("學(xué)號:"+" "+"姓名:"+" "+"地址");
          System.out.println (Stu+" "+name+" "+add);
          }
          c.close();
          }
          }
          D:改動數(shù)據(jù)的存儲過程
            創(chuàng)建存儲過程:
            create procedure ModPro
            @StuID int,
            @StuName varchar(10)
            as
            update 學(xué)生基本信息表 set StuName=@StuName where StuID=@StuID
            運行存儲過程:
            exec ModPro 2,'四毛'
            JAVA調(diào)用存儲過程:
          import java.sql.*;
          public class ProcedureTest
          {
          public static void main(String args[]) throws Exception
          {
          //載入驅(qū)動
          DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
          //獲得連接
          Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
          //創(chuàng)建存儲過程的對象
          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 ("學(xué)號:"+" "+"姓名:"+" "+"地址");
          System.out.println (Stu+" "+name+" "+add);
          }
          c.close();
          }
          }
            E:查詢數(shù)據(jù)的存儲過程(模糊查詢)
            存儲過程:
            create procedure FindCusts
            @cust varchar(10)
            as
            select customerid from orders where customerid
            like '%'+@cust+'%'
            運行:
            execute FindCusts 'alfki'
            在JAVA中調(diào)用:
          import java.sql.*;
          public class ProcedureTest
          {
          public static void main(String args[]) throws Exception
          {
          //載入驅(qū)動
          DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
          //獲得連接
          Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
          //創(chuàng)建存儲過程的對象
          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:添加數(shù)據(jù)的存儲過程
            存儲過程:
            create procedure InsertPro
            @StuID int,
            @StuName varchar(10),
            @StuAddress varchar(20)
            as
            insert into 學(xué)生基本信息表 values(@StuID,@StuName,@StuAddress)
            調(diào)用存儲過程:
            exec InsertPro 5,'555','555'
            在JAVA中運行:
          import java.sql.*;
          public class ProcedureTest
          {
          public static void main(String args[]) throws Exception
          {
          //載入驅(qū)動
          DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
          //獲得連接
          Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
          //創(chuàng)建存儲過程的對象
          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中創(chuàng)建存儲過程 而且在JAVA中直接調(diào)用
          import java.sql.*;
          public class ProcedureTest
          {
          public static void main(String args[]) throws Exception
          {
          //載入驅(qū)動
          DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
          //獲得連接
          Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
          Statement stmt=conn.createStatement();
          //在JAVA中創(chuàng)建存儲過程
          stmt.executeUpdate("create procedure OOP as select * from 學(xué)生成績表");
          CallableStatement c=conn.prepareCall("{call OOP}");
          ResultSet rs=c.executeQuery();
          while(rs.next())
          {
          String chinese=rs.getString("Chinese");
          System.out.println (chinese);
          }
          conn.close();
          }
          }

          posted on 2014-11-07 10:29 順其自然EVO 閱讀(641) 評論(0)  編輯  收藏 所屬分類: 測試學(xué)習(xí)專欄數(shù)據(jù)庫DB2

          <2014年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临安市| 报价| 嘉定区| 青田县| 海淀区| 廉江市| 河北区| 四平市| 深水埗区| 台中县| 筠连县| 射阳县| 静海县| 虞城县| 观塘区| 新巴尔虎左旗| 绵竹市| 黑山县| 馆陶县| 东乌| 麻阳| 凤山县| 黔江区| 施甸县| 高陵县| 六枝特区| 巴塘县| 灵石县| 土默特左旗| 绿春县| 五河县| 平顺县| 孟村| 洞头县| 吉首市| 秀山| 牡丹江市| 大兴区| 林西县| 荆州市| 晋城|