仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 546|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA网页设计JDBCTM 指南:进门7-CallableStatement

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:18:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。7-CallableStatement
本概述是从《JDBCTMDatabaseAccessfromJavaTM:ATutorialandAnnotatedReference》这本书中摘引来的。JavaSoft今朝正在筹办这本书。这本书是一本教程,同时也是JDBC的主要参考手册,它将作为Java系列的构成部分在1997年春季由Addison-Wesley出书公司出书。


7.1概述
CallableStatement对象为一切的DBMS供应了一种以尺度情势挪用已贮存历程的办法。已贮存历程贮存在数据库中。对已贮存历程的挪用是CallableStatement对象所含的内容。这类挪用是用一种换码语法来写的,有两种情势:一种情势带了局参数,另外一种情势不带了局参数(有关换码语法的信息,拜见第4节“语句”)。了局参数是一种输入(OUT)参数,是已贮存历程的前往值。两种情势都可带无数量可变的输出(IN参数)、输入(OUT参数)或输出和输入(INOUT参数)的参数。问号将用作参数的占位符。

在JDBC中挪用已贮存历程的语法以下所示。注重,方括号暗示其间的内容是可选项;方括号自己并非语法的构成部分。

{call历程名[(?,?,...)]}

前往了局参数的历程的语法为:

{?=call历程名[(?,?,...)]}

不带参数的已贮存历程的语法相似:

{call历程名}

一般,创立CallableStatement对象的人应该晓得所用的DBMS是撑持已贮存历程的,而且晓得这些历程都是些甚么。但是,假如必要反省,多种DatabaseMetaData办法都能够供应如许的信息。比方,假如DBMS撑持已贮存历程的挪用,则supportsStoredProcedures办法将前往true,而getProcedures办法将前往对已贮存历程的形貌。

CallableStatement承继Statement的办法(它们用于处置一样平常的SQL语句),还承继了PreparedStatement的办法(它们用于处置IN参数)。CallableStatement中界说的一切办法都用于处置OUT参数或INOUT参数的输入部分:注册OUT参数的JDBC范例(一样平常SQL范例)、从这些参数中检索了局,大概反省所前往的值是不是为JDBCNULL。


7.1.1创立CallableStatement对象
CallableStatement对象是用Connection办法prepareCall创立的。下例创立CallableStatement的实例,个中含有对已贮存历程getTestData挪用。该历程有两个变量,但不含了局参数:

CallableStatementcstmt=con.prepareCall(
"{callgetTestData(?,?)}");

个中?占位符为IN、OUT仍是INOUT参数,取决于已贮存历程getTestData。


7.1.2IN和OUT参数
将IN参数传给CallableStatement对象是经由过程setXXX办法完成的。该办法承继自PreparedStatement。所传进参数的范例决意了所用的setXXX办法(比方,用setFloat来传进float值等)。

假如已贮存历程前往OUT参数,则在实行CallableStatement对象之前必需先注册每一个OUT参数的JDBC范例(这是必须的,由于某些DBMS请求JDBC范例)。注册JDBC范例是用registerOutParameter办法来完成的。语句实行完后,CallableStatement的getXXX办法将取回参数值。准确的getXXX办法是为各参数所注册的JDBC范例所对应的Java范例(从JDBC范例到Java范例的尺度映照见8.6.1节中的表)。换言之,registerOutParameter利用的是JDBC范例(因而它与数据库前往的JDBC范例婚配),而getXXX将之转换为Java范例。

作为示例,下述代码先注册OUT参数,实行由cstmt所挪用的已贮存历程,然后检索在OUT参数中前往的值。办法getByte从第一个OUT参数中掏出一个Java字节,而getBigDecimal从第二个OUT参数中掏出一个BigDecimal对象(小数点前面带三位数):

CallableStatementcstmt=con.prepareCall(
"{callgetTestData(?,?)}");
cstmt.registerOutParameter(1,java.sql.Types.TINYINT);
cstmt.registerOutParameter(2,java.sql.Types.DECIMAL,3);
cstmt.executeQuery();
bytex=cstmt.getByte(1);
java.math.BigDecimaln=cstmt.getBigDecimal(2,3);

CallableStatement与ResultSet分歧,它不供应用增量体例检索年夜OUT值的特别机制。


7.1.3INOUT参数
既撑持输出又承受输入的参数(INOUT参数)除挪用registerOutParameter办法外,还请求挪用得当的setXXX办法(该办法是从PreparedStatement承继来的)。setXXX办法将参数值设置为输出参数,而registerOutParameter办法将它的JDBC范例注册为输入参数。setXXX办法供应一个Java值,而驱动程序先把这个值转换为JDBC值,然后将它送到数据库中。

这类IN值的JDBC范例和供应给registerOutParameter办法的JDBC范例应当不异。然后,要检索输入值,就要用对应的getXXX办法。比方,Java范例为byte的参数应当利用办法setByte来赋输出值。应当给registerOutParameter供应范例为TINYINT的JDBC范例,同时应利用getByte来检索输入值(第8节“JDBC和Java范例之间的映照”将给出具体信息和范例映照表)。

下例假定有一个已贮存历程reviseTotal,其独一参数是INOUT参数。办法setByte把此参数设为25,驱动程序将把它作为JDBCTINYINT范例送到数据库中。接着,registerOutParameter将该参数注册为JDBCTINYINT。实行完该已贮存历程后,将前往一个新的JDBCTINYINT值。办法getByte将把这个新值作为Javabyte范例检索。

CallableStatementcstmt=con.prepareCall(
"{callreviseTotal(?)}");
cstmt.setByte(1,25);
cstmt.registerOutParameter(1,java.sql.Types.TINYINT);
cstmt.executeUpdate();
bytex=cstmt.getByte(1);

7.1.4先检索了局,再检索OUT参数
因为某些DBMS的限定,为了完成最年夜的可移植性,倡议先检索由实行CallableStatement对象所发生的了局,然后再用CallableStatement.getXXX办法来检索OUT参数。

假如CallableStatement对象前往多个ResultSet对象(经由过程挪用execute办法),在检索OUT参数前应先检索一切的了局。这类情形下,为确保对一切的了局都举行了会见,必需对Statement办法getResultSet、getUpdateCount和getMoreResults举行挪用,直到不再有了局为止。

检索完一切的了局后,便可用CallableStatement.getXXX办法来检索OUT参数中的值。


7.1.5检索作为OUT参数的NULL值
前往到OUT参数中的值大概会是JDBCNULL。当呈现这类情况时,将对JDBCNULL值举行转换以使getXXX办法所前往的值为null、0或false,这取决于getXXX办法范例。关于ResultSet对象,要晓得0或false是不是源于JDBCNULL的独一办法,是用办法wasNull举行检测。假如getXXX办法读取的最初一个值是JDBCNULL,则该办法前往true,不然前往flase。第5节“ResultSet”将给出具体信息。


为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。
分手快乐 该用户已被删除
沙发
发表于 2015-1-20 19:52:14 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
海妖 该用户已被删除
板凳
发表于 2015-1-23 19:46:27 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
再见西城 该用户已被删除
地板
发表于 2015-1-31 19:39:16 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
谁可相欹 该用户已被删除
5#
发表于 2015-2-6 21:28:31 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
因胸联盟 该用户已被删除
6#
发表于 2015-2-7 23:19:12 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
小女巫 该用户已被删除
7#
发表于 2015-2-23 15:02:29 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
深爱那片海 该用户已被删除
8#
发表于 2015-2-25 15:16:45 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
不帅 该用户已被删除
9#
发表于 2015-3-6 23:44:15 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
柔情似水 该用户已被删除
10#
发表于 2015-3-19 06:28:45 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
兰色精灵 该用户已被删除
11#
发表于 2015-3-27 09:59:06 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 13:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表