一、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(); } }
转载http://technicalsearch.iteye.com/blog/1433293
发表评论
-
Java网络编程实现多客户端连接服务器
2012-08-09 14:23 1385使用多线程实现多客户端连接服务器, 客户端代码如下: ... -
多线程Java Socket编程示例
2012-08-09 15:34 654转载:http://www.blogjava.net/ster ... -
Java环境变量配置
2012-08-09 16:42 701Java环境变量配置如下: 打开我的电脑--属性--高级-- ... -
Java IO操作之FileWriter、FileReader
2012-08-09 16:44 727Java IO流主要有以下几种分类方式: 1、按照输入的方向 ... -
读取ApplicationResources.properties资源文件
2012-08-06 11:03 11891、使用java国际化提供的方法读取 ? -
Java获得当前时间
2012-08-06 11:03 770public class -
Oracle触发器中的new和old
2012-08-06 11:02 1010对于Oracle触发器中的new和old :new - ... -
Oracle常用函数整理
2012-08-06 10:49 9411、replace函数replace这个函数,具体用法 ... -
java IO操作
2012-07-31 17:26 01 InputStream类型 InputStre ... -
Java Calendar的用法
2012-07-31 08:34 772/** * 计算指定日期为当年第几周 * ... -
实现Servlet定时器
2012-07-30 17:17 677转载:http://windking88.iteye.com/ ... -
java定时器Listener
2012-07-30 15:37 0java定时任务,每天定时执行任务 java定时任 ... -
java定时器
2012-07-30 15:27 0java web 定时器 JAVA WEB定时器 ... -
java遍历map
2012-07-30 13:45 0JDK1.4中 Map map = new HashMap() ... -
oralce 小知识
2012-07-26 09:16 01、replace函数 replace这个函数,具体 ... -
Java 统计各个单词的个数并排序
2012-05-23 08:53 0这个比较简单,我用来练练手,觉得好玩,便把代码贴出来,比 ... -
java匹配字符串
2012-05-23 08:52 0使用正则表达式啊 Pattern p = Patt ... -
java读取文件
2011-12-02 14:03 6651、按字节读取文件 ... -
Java将字符串保存到文件中
2011-12-01 17:17 3786public void WriteToFile1() thro ...
相关推荐
在Java编程中,调用存储过程是连接数据库并执行预定义SQL代码的一种常见方式。存储过程是由数据库管理系统(如MySQL, Oracle, SQL Server等)编译并存储的一组操作,可以包含复杂的逻辑、条件判断、循环等,提高数据...
java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程
在Java编程中,调用数据库的存储过程是常见的任务,特别是在处理复杂的业务逻辑或需要高效数据操作时。本文将详细讲解如何在Java中调用含有`OUT`参数的存储过程,帮助开发者解决这类问题。 首先,理解存储过程的...
java 调用存储过程 总结 创建表 创建存储过程 创建java程序调用
### JAVA调用存储过程知识点详解 #### 一、无结果集返回的存储过程调用 在Java中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...
### Java调用存储过程的两种方法 在Java中调用数据库中的存储过程是常见的操作之一,这不仅可以提高程序性能和代码可维护性,还可以更好地利用数据库的功能。根据提供的标题、描述以及部分内容,本文将详细介绍Java...
在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...
### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...
在Java中,可以使用类似的方法调用此存储过程,但需要额外处理游标的结果。 #### 结论 Java调用存储过程是实现高效数据库交互的关键技术。通过正确设置参数、执行存储过程并管理资源,可以在Java应用中充分利用存储...
在Java应用程序中,可以通过Java Database Connectivity (JDBC) API来调用MySQL的存储过程。 首先,确保你已经安装了MySQL数据库,并且在数据库中创建了一个或多个存储过程。例如,`findAllBook`、`pro_test`和`pro...
以上就是使用Java调用Oracle存储过程的方法,包括处理基本类型返回值和游标返回值。在实际开发中,可能还需要处理异常、事务管理等问题,确保代码的健壮性和可维护性。同时,为了提高性能,建议使用连接池管理数据库...
本文将详细介绍 Java 调用 DB2 存储过程的方法和步骤,并提供了详细的代码示例。 一、创建存储过程 在 DB2 中,创建存储过程需要使用 CREATE PROCEDURE 语句。例如,创建一个无参存储过程可以使用以下语句: ```...
在Java编程中,调用数据库存储过程是一种常见的操作,特别是在处理复杂的业务逻辑或者批量数据操作时。本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先...
能不能写个动态的业务,只输入存储过程名称,自动...只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...
在Java编程中,调用MySQL存储过程是一种常见的数据库交互方式,尤其在处理复杂业务逻辑或大量数据操作时。本文将详细讲解如何通过Java来执行MySQL的存储过程。 首先,了解存储过程的基本概念。存储过程是预编译在...