1. 程式人生 > >JAVA中對儲存過程的呼叫方法

JAVA中對儲存過程的呼叫方法

一:Java如何實現對儲存過程的呼叫:
   A:不帶輸出引數的
   ---------------不帶輸出引數的----------------------------------
create procedure getsum
@n int =0<--此處為引數-->
as
declare @sum int<--定義變數-->
declare @i int
set @sum=0
set @i=0
while @i<[email protected] begin
set @[email protected][email protected]


set @[email protected]+1
end
print 'the sum is '+ltrim(rtrim(str(@sum)))


--------------在SQL中執行:--------------------
   exec getsum 100


------------在JAVA中呼叫:---------------------
   JAVA可以呼叫   但是在JAVA程式卻不能去顯示該儲存過程的結果 因為上面的儲存
   過程的引數型別int 傳遞方式是in(按值)方式

import java.sql.CallableStatement; //帶哦用儲存過程所必須的語句藉口
import java.sql.Connection;
import java.sql.DriverManager;
java.sql包下介面CallableStatement是使用儲存過程必須的語句介面,Connection介面用來獲得資料庫連線,DriverManager用來載入資料庫連線驅動。
   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","");


         //建立儲存過程的物件,call後面就是儲存過程名和需要傳遞的引數

         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<[email protected] begin
set @[email protected][email protected]
set @[email protected]+1
end
set @[email protected]
   -------------------在查詢分析器中執行------------
   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 @[email protected]+';'[email protected]
   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("{callCursorIntoProcedure(?)}");
  
  //註冊儲存過程的第二個引數,阿拉伯數字指定第幾個引數,第二個引數指定型別
   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 [email protected]
--建立完畢
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 [email protected] where [email protected]

   -------------執行儲存過程-------------------------
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 '%'[email protected]+'%'
     ---------------執行---------------------------
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","");
  
   //在java中建立儲存過程,需要宣告Statement物件
   Statement stmt=conn.createStatement();
   //在JAVA中建立儲存過程
   stmt.executeUpdate("create procedureOOP 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();
  
}

相關推薦

JAVA儲存過程呼叫方法

一:Java如何實現對儲存過程的呼叫:    A:不帶輸出引數的    ---------------不帶輸出引數的---------------------------------- create procedure getsum @n int =0<--此處為引

Java域和靜態方法的訪問不具有多態性

ext 轉型 highlight .get 判斷 fin color icm true 1.將方法調用同方法主體關聯起來被稱為 2.編譯期綁定(靜態)是在程序編譯階段就確定了引用對象的類型 3.運行期綁定(動態綁定)是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調

資料庫儲存過程的理解

1.儲存過程的概念 儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集。經編譯後儲存在資料庫中。 儲存過程是資料庫中的一個重要物件,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。 儲存過程是由 流控制 和 SQL語句

PLsql執行儲存過程方法

1、在sqlplus命令列介面使用"EXECUTE"命令(簡寫做"EXEC")執行[email protected]> exec proc_helloworldHello World!PL/SQL procedure successfully complet

在MSSQL一個儲存過程呼叫另一個儲存過程

建一個簡單的儲存過程A,輸出2個值: Create Proc A  @AOUTPUT1 int output,  @AOUTPUT2 int output  As  begin  set @AOUTPUT1 = 100  set @AOUTPUT2 = 50  returnend  Go   Crea

java使用儲存過程

以前用的是Statement 和 PreparedStatement 呼叫儲存過程就用到 CallableStatement cstmt =conn.prepareCall("call p(?,?,?,?)"); 宣告 一個叫p的儲存過程,需要4個引數 其中1,2為輸入引數

Java儲存過程呼叫方法

//一:Java如何實現對儲存過程的呼叫: // A:不帶輸出引數的 // ---------------不帶輸出引數的---------------------------------- create procedure getsum @n int =0<--此處為引數--> as d

Java如何實現儲存過程呼叫

一、Java如何實現對儲存過程的呼叫: A:不帶輸出引數的 create procedure getsum   @n int =0<--此處為引數-->   as  decla

mssql 儲存過程呼叫另一個儲存過程的結果的方法分享

摘要:   下文將分享"一個儲存過程"中如何呼叫"另一個儲存過程的返回結果",並應用到自身的運算中在實際開發中,我們經常會遇到在一個儲存過程中呼叫另一個儲存過程的返回結果(儲存過程相互應用) 實現思路:主要採用臨時表將儲存過程返回的結果集進行儲存,然後供另一個儲存過程應用。

JAVA象創建和初始化過程

2.3 人的 cin 類型變量 認識 handle product window blank 1.Java中的數據類型   Java中有3個數據類型:基本數據類型(在Java中,boolean、byte、short、int、long、char、float、double這八種

JavaList集合排序的方法 比較器的使用 根據學生象數序 語文 英語成績總和進行sort排序

private system.in set swift ringbuf 直觀 turn @override encoding package com.swift; import java.util.ArrayList; import java.util.Collecti

java象的創建過程

color pos 文件 創建 log class對象 存儲 舉例 font 舉例:類A的的對象a的創建過程 1,因為構造器實質上是靜態方法,當首次創建A類的對象時(即執行了A類的靜態方法),或者A類的靜態方法/靜態域首次被訪問時,java解釋器必須查找類路徑,以定位A.

java筆記 類不能直接呼叫方法

package feibonacci; public class Feibonacci { private int t1 = 1,t2 = 1; private int s = 0; System.out.print(t1+" "+t2+" ");/ /,報錯,類中只

Mysql的儲存過程,Mybatis儲存過程呼叫

                        mysql儲存過

儲存過程的使用和基礎語法,以及.Net呼叫儲存過程方法

1、儲存過程的概念 儲存過程是一組為了完成特定功能的SQL語句集,儲存在資料庫中,經過第一次呼叫編譯後,再次呼叫不需要編譯。使用者通過指定儲存過程的名字並給出引數 (如果該儲存過程帶有引數) 來執行它 , 儲存過程是資料庫中的一個重要物件 ; 儲存過程中可以包含 邏輯控制語句 和 資料操

springboot_springdata-jpa @Procedure呼叫儲存過程查詢方法

專案地址: https://github.com/heng1234/springdata-jpa  1、mysql資料建立表和儲存過程 CREATE TABLE `user` ( `id` INT (11) NOT NULL AUTO_INCREMENT,

javaLIst集合的兩種排序方法(即sort的使用方法)

List集合的排序: java提供了兩種排序方式,分別是Collections.sort(List)和Collections.sort(List,Commparator),下面就這兩種方法的使用做詳細的說明: -Collections.sort(List); sort的引數是一

Java包與包之間方法呼叫及其關鍵字區分(基礎)

最近在寫應用時,對包與包之間方法的呼叫不太清楚,專門看視訊和網站後整理了這篇文章,希望對剛入門的同志有所幫助,進入主題。 首先我們先簡單看看Java中private、protected、public和default的主要區別:(看不懂沒關係,有個印象就行,然後往下看) 我們將

Oracle建立儲存過程呼叫過程(一)

1、定義         所謂儲存過程(Stored Procedure),就是一組用於完成特定資料庫功能的SQL語句集,該SQL語句集經過 編譯後儲存在資料庫系統中。在使用時候,使用者通過指定已經定義的儲存過程名字並給出相應的儲存過程引數 來呼叫並執行

Java 父類怎麼呼叫子類的方法

父類能呼叫子類的方法嗎? 答:能。 怎麼做? ● 把子類傳遞到父類的有參構造中,然後呼叫。● 使用反射的方式呼叫,你使用了反射還有誰不能呼叫的?! ● 父類呼叫子類的靜態方法。 案例展示: pac