程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java對存儲過程的調用方法

Java對存儲過程的調用方法

編輯:關於JAVA

一、Java如何實現對存儲過程的調用:

A:不帶輸出參數的

  1. create procedure getsum
  2. @n int =0<--此處為參數-->
  3. as
  4. declare @sum int<--定義變量-->
  5. declare @i int
  6. set @sum=0
  7. set @i=0
  8. while @i<=@n begin
  9. set @sum=@sum+@i
  10. set @i=@i+1
  11. end
  12. print 'the sum is '+ltrim(rtrim(str(@sum)))

在SQL中執行:

exec getsum 100

在Java中調用:

JAVA可以調用 但是在Java程序卻不能去顯示該存儲過程的結果 因為上面的存儲過程的參數類型int 傳遞方式是in(按值)方式

  1. import Java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //加載驅動
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //獲得連接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //創建存儲過程的對象
  11. CallableStatement c=conn.prepareCall("{call getsum(?)}");
  12. //給存儲過程的參數設置值
  13. c.setInt(1,100); //將第一個參數的值設置成100
  14. //執行存儲過程
  15. c.execute();
  16. conn.close();
  17. }
  18. }

B:帶輸出參數的

1:返回int

  1. alter procedure getsum
  2. @n int =0,
  3. @result int output
  4. as
  5. declare @sum int
  6. declare @i int
  7. set @sum=0
  8. set @i=0
  9. while @i<=@n begin
  10. set @sum=@sum+@i
  11. set @i=@i+1
  12. end
  13. set @result=@sum

在查詢分析器中執行:

  1. declare @myResult int
  2. exec getsum 100,@myResult output
  3. print @myResult

在Java中調用:

  1. import Java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //加載驅動
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //獲得連接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //創建存儲過程的對象
  11. CallableStatement c=conn.prepareCall("{call getsum(?,?)}");
  12. //給存儲過程的第一個參數設置值
  13. c.setInt(1,100);
  14. //注冊存儲過程的第二個參數
  15. c.registerOutParameter(2,Java.sql.Types.INTEGER);
  16. //執行存儲過程
  17. c.execute();
  18. //得到存儲過程的輸出參數值
  19. System.out.println (c.getInt(2));
  20. conn.close();
  21. }
  22. }

2:返回varchar

存儲過程帶游標:

在存儲過程中帶游標 使用游標不停的遍歷orderid

  1. create procedure CursorIntoProcedure
  2. @pname varchar(8000) output
  3. as
  4. --定義游標
  5. declare cur cursor for select orderid from orders
  6. --定義一個變量來接收游標的值
  7. declare @v varchar(5)
  8. --打開游標
  9. open cur
  10. set @pname=''--給@pname初值
  11. --提取游標的值
  12. fetch next from cur into @v
  13. while @@fetch_status=0
  14. begin
  15. set @pname=@pname+';'+@v
  16. fetch next from cur into @v
  17. end
  18. print @pname
  19. --關閉游標
  20. close cur
  21. --銷毀游標
  22. deallocate cur

執行存儲過程:

  1. exec CursorIntoProcedure ''

Java調用:

  1. import Java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //加載驅動
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //獲得連接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. CallableStatement c=conn.prepareCall("{call CursorIntoProcedure(?)}");
  11. c.registerOutParameter(1,Java.sql.Types.VARCHAR);
  12. c.execute();
  13. System.out.println (c.getString(1));
  14. conn.close();
  15. }
  16. }

C:刪除數據的存儲過程

存儲過程:

  1. drop table 學生基本信息表
  2. create table 學生基本信息表
  3. (
  4. StuID int primary key,
  5. StuName varchar(10),
  6. StuAddress varchar(20)
  7. )
  8. insert into 學生基本信息表 values(1,'三毛','wuhan')
  9. insert into 學生基本信息表 values(2,'三毛','wuhan')
  10. create table 學生成績表
  11. (
  12. StuID int,
  13. Chinese int,
  14. PyhSics int
  15. foreign key(StuID) references 學生基本信息表(StuID)
  16. on delete cascade
  17. on update cascade
  18. )
  19. insert into 學生成績表 values(1,99,100)
  20. insert into 學生成績表 values(2,99,100)

創建存儲過程:

  1. create procedure delePro
  2. @StuID int
  3. as
  4. delete from 學生基本信息表 where StuID=@StuID
  5. --創建完畢
  6. exec delePro 1 --執行存儲過程
  7. --創建存儲過程
  8. create procedure selePro
  9. as
  10. select * from 學生基本信息表
  11. --創建完畢
  12. exec selePro --執行存儲過程

在Java中調用:

  1. import Java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //加載驅動
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //獲得連接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //創建存儲過程的對象
  11. CallableStatement c=conn.prepareCall("{call delePro(?)}");
  12. c.setInt(1,1);
  13. c.execute();
  14. c=conn.prepareCall("{call selePro}");
  15. ResultSet rs=c.executeQuery();
  16. while(rs.next())
  17. {
  18. String Stu=rs.getString("StuID");
  19. String name=rs.getString("StuName");
  20. String add=rs.getString("StuAddress");
  21. System.out.println ("學號:"+" "+"姓名:"+" "+"地址");
  22. System.out.println (Stu+" "+name+" "+add);
  23. }
  24. c.close();
  25. }
  26. }

D:修改數據的存儲過程

創建存儲過程:

  1. create procedure ModPro
  2. @StuID int,
  3. @StuName varchar(10)
  4. as
  5. update 學生基本信息表 set StuName=@StuName where StuID=@StuID

執行存儲過程:

  1. exec ModPro 2,'四毛'

Java調用存儲過程:

  1. import Java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //加載驅動
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //獲得連接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //創建存儲過程的對象
  11. CallableStatement c=conn.prepareCall("{call ModPro(?,?)}");
  12. c.setInt(1,2);
  13. c.setString(2,"美女");
  14. c.execute();
  15. c=conn.prepareCall("{call selePro}");
  16. ResultSet rs=c.executeQuery();
  17. while(rs.next())
  18. {
  19. String Stu=rs.getString("StuID");
  20. String name=rs.getString("StuName");
  21. String add=rs.getString("StuAddress");
  22. System.out.println ("學號:"+" "+"姓名:"+" "+"地址");
  23. System.out.println (Stu+" "+name+" "+add);
  24. }
  25. c.close();
  26. }
  27. }

E:查詢數據的存儲過程(模糊查詢)

存儲過程:

  1. create procedure FindCusts
  2. @cust varchar(10)
  3. as
  4. select customerid from orders where customerid
  5. like '%'+@cust+'%'

執行:

  1. execute FindCusts 'alfki'

在Java中調用:

  1. import Java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //加載驅動
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //獲得連接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //創建存儲過程的對象
  11. CallableStatement c=conn.prepareCall("{call FindCusts(?)}");
  12. c.setString(1,"Tom");
  13. ResultSet rs=c.executeQuery();
  14. while(rs.next())
  15. {
  16. String cust=rs.getString("customerid");
  17. System.out.println (cust);
  18. }
  19. c.close();
  20. }
  21. }

F:增加數據的存儲過程

存儲過程:

  1. create procedure InsertPro
  2. @StuID int,
  3. @StuName varchar(10),
  4. @StuAddress varchar(20)
  5. as
  6. insert into 學生基本信息表 values(@StuID,@StuName,@StuAddress)

調用存儲過程:

  1. exec InsertPro 5,'555','555'

在Java中執行:

  1. import Java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //加載驅動
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //獲得連接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. //創建存儲過程的對象
  11. CallableStatement c=conn.prepareCall("{call InsertPro(?,?,?)}");
  12. c.setInt(1,6);
  13. c.setString(2,"Liu");
  14. c.setString(3,"wuhan");
  15. c.execute();
  16. c=conn.prepareCall("{call selePro}");
  17. ResultSet rs=c.executeQuery();
  18. while(rs.next())
  19. {
  20. String stuid=rs.getString("StuID");
  21. String name=rs.getString("StuName");
  22. String address=rs.getString("StuAddress");
  23. System.out.println (stuid+" "+name+" "+address);
  24. }
  25. c.close();
  26. }
  27. }

G:在JAVA中創建存儲過程 並且在Java中直接調用

  1. import Java.sql.*;
  2. public class ProcedureTest
  3. {
  4. public static void main(String args[]) throws Exception
  5. {
  6. //加載驅動
  7. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  8. //獲得連接
  9. Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  10. Statement stmt=conn.createStatement();
  11. //在Java中創建存儲過程
  12. stmt.executeUpdate("create procedure OOP as select * from 學生成績表");
  13. CallableStatement c=conn.prepareCall("{call OOP}");
  14. ResultSet rs=c.executeQuery();
  15. while(rs.next())
  16. {
  17. String chinese=rs.getString("Chinese");
  18. System.out.println (chinese);
  19. }
  20. conn.close();
  21. }
  22. }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved