• 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.  
    12. //创建存储过程的对象  
    13. CallableStatement c=conn.prepareCall("{call getsum(?)}");  
    14.  
    15. //给存储过程的参数设置值  
    16. c.setInt(1,100); //将第一个参数的值设置成100  
    17.  
    18. //执行存储过程  
    19. c.execute();  
    20. conn.close();  
    21. }  
    22. }  
    23.  

    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.  
    12. //创建存储过程的对象  
    13. CallableStatement c=conn.prepareCall("{call getsum(?,?)}");  
    14.  
    15. //给存储过程的第一个参数设置值  
    16. c.setInt(1,100);  
    17.  
    18. //注册存储过程的第二个参数  
    19. c.registerOutParameter(2,java.sql.Types.INTEGER);  
    20.  
    21. //执行存储过程  
    22. c.execute();  
    23.  
    24. //得到存储过程的输出参数值  
    25. System.out.println (c.getInt(2));  
    26. conn.close();  
    27. }  
    28. }  

    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.  
    16.  
    17. set @pname=@pname+';'+@v  
    18. fetch next from cur into @v  
    19. end 
    20. print @pname  
    21. --关闭游标  
    22. close cur  
    23. --销毁游标  
    24. 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.  
    12.  
    13. c.registerOutParameter(1,java.sql.Types.VARCHAR);  
    14.  
    15. c.execute();  
    16.  
    17. System.out.println (c.getString(1));  
    18. conn.close();  
    19. }  
    20. }  

    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.  
    12. //创建存储过程的对象  
    13. CallableStatement c=conn.prepareCall("{call delePro(?)}");  
    14.  
    15. c.setInt(1,1);  
    16.  
    17. c.execute();  
    18.  
    19. c=conn.prepareCall("{call selePro}");  
    20. ResultSet rs=c.executeQuery();  
    21.  
    22. while(rs.next())  
    23. {  
    24. String Stu=rs.getString("StuID");  
    25. String name=rs.getString("StuName");  
    26. String add=rs.getString("StuAddress");  
    27.  
    28. System.out.println ("学号:"+" "+"姓名:"+" "+"地址");  
    29. System.out.println (Stu+" "+name+" "+add);  
    30. }  
    31. c.close();  
    32. }  

    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.  
    12. //创建存储过程的对象  
    13. CallableStatement c=conn.prepareCall("{call ModPro(?,?)}");  
    14.  
    15. c.setInt(1,2);  
    16. c.setString(2,"美女");  
    17.  
    18. c.execute();  
    19.  
    20. c=conn.prepareCall("{call selePro}");  
    21. ResultSet rs=c.executeQuery();  
    22.  
    23. while(rs.next())  
    24. {  
    25. String Stu=rs.getString("StuID");  
    26. String name=rs.getString("StuName");  
    27. String add=rs.getString("StuAddress");  
    28.  
    29. System.out.println ("学号:"+" "+"姓名:"+" "+"地址");  
    30. System.out.println (Stu+" "+name+" "+add);  
    31. }  
    32. c.close();  
    33. }  

    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.  
    12. //创建存储过程的对象  
    13. CallableStatement c=conn.prepareCall("{call FindCusts(?)}");  
    14. c.setString(1,"Tom");  
    15.  
    16. ResultSet rs=c.executeQuery();  
    17.  
    18. while(rs.next())  
    19. {  
    20. String cust=rs.getString("customerid");   
    21. System.out.println (cust);  
    22. }  
    23. c.close();  
    24. }  

    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.  
    12. //创建存储过程的对象  
    13. CallableStatement c=conn.prepareCall("{call InsertPro(?,?,?)}");  
    14. c.setInt(1,6);  
    15. c.setString(2,"Liu");  
    16. c.setString(3,"wuhan");  
    17.  
    18. c.execute();  
    19.  
    20. c=conn.prepareCall("{call selePro}");  
    21. ResultSet rs=c.executeQuery();  
    22.  
    23. while(rs.next())  
    24. {  
    25. String stuid=rs.getString("StuID");   
    26. String name=rs.getString("StuName");   
    27. String address=rs.getString("StuAddress");   
    28. System.out.println (stuid+" "+name+" "+address);  
    29. }  
    30. c.close();  
    31. }  

    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.  
    11.  
    12. Statement stmt=conn.createStatement();  
    13. //在JAVA中创建存储过程  
    14. stmt.executeUpdate("create procedure OOP as select * from 学生成绩表");  
    15.  
    16.  
    17. CallableStatement c=conn.prepareCall("{call OOP}");  
    18.  
    19. ResultSet rs=c.executeQuery();  
    20. while(rs.next())  
    21. {  
    22. String chinese=rs.getString("Chinese");  
    23.  
    24. System.out.println (chinese);  
    25. }  
    26. conn.close();  
    27.  
    28. }  
    29. }  

    原文链接:http://technicalsearch.iteye.com/blog/1433293

  • 相关阅读:
    使用ABP构建WebAPI的心得
    修改andriod模拟器的IMEI,IMSI,手机号,SIM卡号
    Abp框架下 Area中新建Layout报错的问题
    通过Roslyn构建自己的C#脚本 资料记录
    EF5 CodeFirst 修改主键自增属性
    Oracle字段类型及存储(一)
    ArcMap之等值面
    街景初看
    转:oracle中schema指什么
    OSGI起程一——确定目标
  • 原文地址:https://www.cnblogs.com/huaxingtianxia/p/5580985.html
Copyright © 2020-2023  润新知