J2ee Jdbc存储过程调用

首先给大家出个题目,看看有想法没有,
求二者的关系
男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报头与处理

网站名称:J2ee Jdbc存储过程调用
网页链接:http://www.shufengxianlan.com/qtweb/news39/394189.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联