`
withsoftware
  • 浏览: 5951 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
最近访客 更多访客>>
社区版块
存档分类
最新评论

在JAVA中调用存储过程

阅读更多
一:Java如何实现对存储过程的调用:
   A:不带输出参数的
   ---------------不带输出参数的----------------------------------
create procedure getsum
@n int =0<--此处为参数-->
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中执行:--------------------
   exec getsum 100


------------在JAVA中调用:---------------------
   JAVA可以调用   但是在JAVA程序却不能去显示该存储过程的结果 因为上面的存储
   过程的参数类型int 传递方式是in(按值)方式
   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);   //将第一个参数的值设置成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<=@n begin
set @sum=@sum+@i
set @i=@i+1
end
set @result=@sum
   -------------------在查询分析器中执行------------
   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 @pname=@pname+';'+@v
   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("{call CursorIntoProcedure(?)}");
 
 
   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 StuID=@StuID
--创建完毕
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 StuName=@StuName where StuID=@StuID



   -------------执行存储过程-------------------------
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 '%'+@cust+'%'
     ---------------执行---------------------------
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","");
 
 
   Statement stmt=conn.createStatement();
   //在JAVA中创建存储过程
   stmt.executeUpdate("create procedure OOP 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中调用存储过程是实现数据库操作的一种高级方法,特别是在处理复杂的业务逻辑或需要执行大量数据更新的情况下。本文将详细解析如何在Java应用程序中调用Oracle数据库中的存储过程,并解释如何传递参数以及接收...

    在Java中调用存储过程详解

    本文将深入探讨如何在Java中调用存储过程,并通过实例进行讲解。 一、存储过程概述 存储过程是数据库中预编译的SQL语句集合,可以包含多个SQL语句和控制流程结构,如条件判断、循环等。它们提供了提高性能、减少...

    jAVA中调用存储过程

    在Java中调用存储过程是实现数据库操作的一种高级方法,特别是在处理复杂的业务逻辑或执行大量数据更新时。本文将深入探讨如何在Java中调用Oracle数据库的存储过程,并通过两个具体的示例进行详细讲解。 ### Java...

    Java中调用存储过程或存储函数的方法[文].pdf

    在Java中,我们使用`CallableStatement`接口来调用存储过程。下面的代码示例展示了如何执行一个名为`procedure_name`的存储过程,它属于`package_name`包,并且接收四个输入参数和两个输出参数: ```java ...

    jsp中调用存储过程的方法

    有时,我们需要在JSP中调用数据库的存储过程以执行特定的业务逻辑。存储过程是预编译的SQL语句集合,可以在数据库中高效地执行。本文将详细介绍如何在JSP中调用存储过程,并提供一个简单示例。 首先,我们需要了解...

    java 调用db2存储过程

    要在 Java 中调用带有输入参数的存储过程,需要使用 CallableStatement 对象,并将输入参数传递给存储过程。例如: ```java CallableStatement cs = conn.prepareCall("call insql(?)"); cs.setString(1, "A00"); cs...

    JAVA调用ORACLE存储过程

    在 Java 中调用存储过程 接下来,在 Java 中调用上述存储过程,实现如下: ```java public class TestProcedure { Connection conn = null; CallableStatement cstmt = null; String url = "jdbc:oracle:thin:@...

    java 调用存储过程

    下面将详细阐述如何在Java中调用存储过程。 首先,要调用存储过程,你需要确保已正确地在Java应用程序中建立了与数据库的连接。这通常通过JDBC(Java Database Connectivity)实现,它提供了一组API来与各种数据库...

    java调用存储过程小结.pdf

    在 Java 中调用存储过程需要使用 JDBC 连接发送给 DBMS,执行存储过程并返回结果。下面是一个简单的示例代码,演示如何在 Java 中调用 Oracle 存储过程: ```java public class TestProcedure { Connection conn=...

    java 调存储过程

    下面将详细阐述如何在Java中调用存储过程,以及涉及的参数输入输出。 1. **JDBC接口调用存储过程** Java通过Java Database Connectivity (JDBC) API与数据库进行交互。要调用存储过程,首先需要建立数据库连接,...

    java中存储过程的使用

    在Java中调用存储过程的示例代码如下: ```java public static void main(String[] args) { try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:...

    java调用存储过程(含out参数)

    Java中调用存储过程主要通过JDBC(Java Database Connectivity)接口实现。以下是一步步的操作步骤: 1. **加载数据库驱动**:首先,确保已添加对应数据库的JDBC驱动库到项目类路径中,如MySQL的`mysql-connector-...

    java调用存储过程源码 sql数据库

    在Java中调用存储过程主要通过JDBC(Java Database Connectivity)接口实现。以下是一个基本的步骤: 1. **加载驱动**:首先,你需要加载对应数据库的JDBC驱动。例如,如果你使用的是MySQL,你可能需要`Class.for...

    一个java调用存储过程的示例项目

    在Java中调用存储过程通常涉及以下步骤: 1. 加载数据库驱动:根据所使用的数据库类型(如MySQL、Oracle、SQL Server等),需要导入相应的JDBC驱动库,并使用`Class.forName()`方法加载驱动。 2. 建立连接:使用`...

    java调用存储过程返回数组

    本文将详细探讨如何在Java中调用存储过程,并处理返回的数组类型数据。 首先,存储过程是一种预编译的SQL语句集合,它可以包含多个SQL操作,变量、条件判断、循环等控制结构。在Oracle数据库中,可以创建一个存储...

    java调用存储过程

    本文将深入探讨如何在Java中调用存储过程,以及这背后涉及的相关技术点。 首先,理解存储过程的基本概念至关重要。存储过程是由数据库管理系统(如MySQL、Oracle、SQL Server等)支持的,它允许开发者编写一系列...

    JAVA存储过程講義與範例

    该文件很可能是展示如何在JAVA中调用存储过程的一个示例程序。它可能包含以下关键部分: - 加载数据库驱动,建立数据库连接。 - 创建CallableStatement对象,设置存储过程的参数。 - 执行存储过程并处理返回的结果...

    java调用Oracle存储过程

    在Java中调用存储过程主要通过`CallableStatement`接口实现,它是`PreparedStatement`的子接口,专用于调用存储过程和函数。 以下是一个基本的步骤来调用Oracle存储过程: 1. **建立数据库连接**: 使用`...

    JAVA存储过程详解

    ### JAVA存储过程详解 在Java开发中,存储过程是一种预...通过以上示例,我们可以看到如何在Java中调用存储过程,以及如何在SQL Server中创建和使用存储过程。这些技术和方法对于提高应用程序的性能和安全性非常重要。

Global site tag (gtag.js) - Google Analytics