• 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. }  
  • 相关阅读:
    〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
    〖Linux〗Kubuntu, the application 'Google Chrome' has requested to open the wallet 'kdewallet'解决方法
    unity, dll is not allowed to be included or could not be found
    android check box 自定义图片
    unity, ios skin crash
    unity, Collider2D.bounds的一个坑
    unity, ContentSizeFitter立即生效
    类里的通用成员函数应声明为static
    unity, Gizmos.DrawMesh一个坑
    直线切割凹多边形
  • 原文地址:https://www.cnblogs.com/littleCode/p/3461017.html
Copyright © 2020-2023  润新知