J2ee Jdbc存储过程调用

开发 后端
本文总结了J2ee的Jdbc存储过程调用。Jdbc存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。

首先给大家出个题目,看看有想法没有,
求二者的关系
男A与女B结婚生了男C
男X与女Y结婚生了女Z
男C与女Z结婚...
这就是人间的结婚生子一代传一代的关系
(要考虑一人多次结婚的情况)

目的:
设置Table,栏位自定,
写一SQL函数求出若干年前后的任意两人之间的关系,假定身份证号码不重复,当输入两身份证后就能得出他们的关系

下面是正文

Jdbc存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 也可以创建在 Microsoft® SQL Server™ 启动时自动运行的存储过程。 用户定义函数,它是返回值的已保存的 Transact-SQL 例程。用户定义函数不能用于执行一组修改全局数据库状态的操作。 与系统函数一样,用户定义函数可以从查询中唤醒调用。也可以像存储过程一样,通过 EXECUTE 语句执行。 总之: 自定义函数:有且只有一个返回值,就像普通的函数一样,可以直接在表达式中嵌入调用并可以随处调用。 存储过程:可以没有返回值,也可以有任意个输出参数,必须单独调用

存储过程很好吧,尤其是涉及到多表联合更新的问题,就效率易用两个方面来说就都NB的了。既然这么好的东西,你说说在实际的WEB application里面不用岂不是可惜了,话说到咱们的WEB APP中,要是NB的企业一般是不会用什么 structs hibernate spring jsf等等框架,但是不能说这些东西不优秀不好用,相反一些公司的一般项目用这些东西的优点自不必多说。但是现在流行的ssh也不是很好的支持存储过程,见网上也说hibernate 3.X支持存储过程,笨人没有用过,不敢妄加评论,方正2.X不行,有高人说spring支持,查了查看看,里面说到底也是用jdbc,而且还是先要从文件系统里面读取配置数据源的XML文件,解析出来相应的数据连接,我测试了一下,单次访问,速度都明显的需要等待,试想如果访问量大的话,速度效率自然不敢恭维。既然本身就是用jdbc,为何不直接生成一个专门处理存储过程的类,里面用jdbc去处理呢。而且就这个方法也有人用,感觉不是很多,笨人测试了一下,速度明显比那个提取XML文件的方法高,于是在没有找到更好办法时间,我决定暂时用这个笨方法:

下面我给出几个例子,以后好复习学习:

  1. create table bankMoney(  
  2. Id varchar(5) primary key not null,  
  3. userID varchar(20),  
  4. sex varchar(2),  
  5. userMoney int 
  6. )  

这个table 是随便搞的,意义混乱,不要当真,说明问题就行

第一种情况:没有输入返回记录集

  1. create proc selectNoParam  
  2. as  
  3. select * from bankMoney  
  4. java code:  
  5. Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");  
  6.       Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=bbs""sa""sa");  
  7.  
  8. CallableStatement cs = con.prepareCall("{call selectNoParam()}");  
  9.       ResultSet rs = cs.executeQuery();  
  10.       while(rs.next()){  
  11.         System.out.println(rs.getString("Id")+" " + rs.getString("userid")+" " + rs.getString("sex")+" " + rs.getString("userMoney"));  
  12. }  

第二种情况:

有输入参数,没有输出参数的例子。这里的delbankMoney(?),一个问号代表一个参数,包括输入参数和输出参数,

      //从左到右index从1开始依次增大。一般来说在声明定义存储过程时间,后面一般放输出参数

--删除相应员工

  1. create proc delbankMoney(@paramId varchar(5))  
  2. as  
  3. delete from bankMoney where Id = @paramIdjava code:  
  4. CallableStatement cs = con.prepareCall("{call delbankMoney(?)}");  
  5.       cs.setString(1"001");  
  6.       cs.execute(); 

第三中情况:一个输入,一个输出,后面的问号代表输出,可以有多个输出,具体怎么设置要根据你在数据库中的声明顺序

  1. Proc code:  
  2. create proc testOutPut(@paramId int,@paramSalary int output)  
  3. as  
  4. select @paramSalary = userMoney from bankMoney where Id = @paramId 
  5. java code:  
  6. CallableStatement cs = con.prepareCall("{call testOutPut(?,?)}");  
  7.       cs.setString(1"001");  
  8.       cs.registerOutParameter(2, java.sql.Types.TINYINT);  
  9.       cs.executeUpdate();  
  10.       System.out.println("001号员工工资为:"+cs.getObject(2));  
  11.       cs.close();  
  12.       con.close();  

Jdbc存储过程调用基本上就是这样了。

【编辑推荐】

  1. j2ee web service开发(三)SAAJ带附件的soap消息
  2. j2ee web service开发(二)动态代理与动态调用
  3. J2ee Jdbc 存储过程调用
  4. j2ee web service开发(五)把ejb发布为web服务
  5. j2ee web service开发(四)soap报头与处理
责任编辑:book05 来源: csdn
相关推荐

2009-06-23 08:12:48

J2EE调用存储过程

2009-06-22 17:34:40

J2EE架构

2009-06-23 08:06:46

J2EE体系架构J2EE模型J2EE设计模式

2009-06-10 16:25:43

J2EE架构架构

2009-06-10 14:10:23

J2EE学习J2EE是什么

2009-06-11 17:06:11

J2EE历史Java EE概述

2009-06-10 13:37:06

J2EE可伸缩性J2EE灵活性J2EE维护

2009-06-23 16:48:26

J2EE常见问题J2EE平台

2009-06-19 16:38:45

JDBC简介J2EE

2009-06-22 17:05:41

Java EEJava企业应用

2009-06-18 15:54:57

J2EE下使用JNDI

2009-06-18 16:13:14

J2EE开发

2009-06-22 16:21:02

J2EE线程

2009-06-22 11:15:00

J2EE应用测试

2011-05-16 14:07:58

J2EE

2009-06-19 17:03:44

J2EE学习

2009-06-11 17:11:07

J2EE设计模式工厂模式

2009-06-11 17:19:47

J2EE设计模式Template

2009-02-23 11:18:06

J2EE架构师Java

2019-01-08 16:26:43

Java EEJ2EEJakarta EE
点赞
收藏

51CTO技术栈公众号