專注技術(shù),奮斗不止

          程序員-小倪的個人博客

          java 調(diào)用存儲過程


          一:Java如何實現(xiàn)對存儲過程的調(diào)用:
             A:不帶輸出參數(shù)的
            
          ---------------不帶輸出參數(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中執(zhí)行:--------------------
             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
                 

                   //執(zhí)行存儲過程
                   c.execute();
                  
          conn.close();
          }
          }
            
             B:帶輸出參數(shù)的
               1:返回int
                  
          -------------------------帶輸出參數(shù)的----------------
          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
            
          -------------------在查詢分析器中執(zhí)行------------
             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);
                 
                  
          //執(zhí)行存儲過程
                   c.execute();
                 
                  
          //得到存儲過程的輸出參數(shù)值
                   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
          --關(guān)閉游標
          close cur
          --銷毀游標
          deallocate cur



             ------------執(zhí)行存儲過程--------------
          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  
          --執(zhí)行存儲過程
          --創(chuàng)建存儲過程
          create procedure selePro
          as
          select * from
          學(xué)生基本信息表
          --創(chuàng)建完畢
          exec selePro   --執(zhí)行存儲過程
              
          ------------------在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



             -------------執(zhí)行存儲過程-------------------------
          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+'%'
              
          ---------------執(zhí)行---------------------------
          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中執(zhí)行-------------
          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 2012-02-25 10:10 ProgramerNi 閱讀(153) 評論(0)  編輯  收藏 所屬分類: J2EE

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          主站蜘蛛池模板: 亳州市| 余江县| 万宁市| 贵德县| 康马县| 万年县| 二手房| 茌平县| 泽普县| 右玉县| 乳山市| 武鸣县| 确山县| 禹州市| 阜阳市| 沙湾县| 柏乡县| 格尔木市| 大同市| 泾川县| 西乡县| 平果县| 诸暨市| 连山| 洪湖市| 印江| 湘乡市| 黎城县| 黄石市| 昌江| 辽阳县| 普格县| 哈尔滨市| 紫金县| 望都县| 卓资县| 利津县| 九龙县| 犍为县| 吴堡县| 札达县|