大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> JSP专区 -> JDBCTM 指南:入门7-CallableStatement

JDBCTM 指南:入门7-CallableStatement

时间: 2021-07-31 作者:daque

7 - callablestatement本概括是从《jdbctm database access from javatm: a tutorial and annotated reference 》这该书中摘引入的。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 典型)、从那些参数中检索截止,大概查看所归来的值能否为 jdbc null。7.1.1 创造 callablestatement 东西callablestatement 东西是用 connection 本领 preparecall 创造的。下例创造 callablestatement 的范例,个中含有对已积聚进程 gettestdata 挪用。该进程有两个变量,但不含截止参数: callablestatement cstmt = con.preparecall("{call gettestdata(?, ?)}");个中 ? 占位符为 in、 out 仍旧 inout 参数,在于于已积聚进程 gettestdata。7.1.2 in 和 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 东西(少量点反面带三位数): callablestatement cstmt = con.preparecall("{call gettestdata(?, ?)}");cstmt.registeroutparameter(1, java.sql.types.tinyint);cstmt.registeroutparameter(2, java.sql.types.decimal, 3);cstmt.executequery();byte x = cstmt.getbyte(1);java.math.bigdecimal n = cstmt.getbigdecimal(2, 3);callablestatement 与 resultset 各别,它不供给用增量办法检索大 out 值的特出体制。7.1.3 inout 参数既扶助输出又接收输入的参数(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,启动步调将把它动作 jdbc tinyint 典型送给数据库中。接着,registeroutparameter 将该参数备案为 jdbc tinyint。实行完该已积聚进程后,将归来一个新的 jdbc tinyint 值。本领 getbyte 将把这个新值动作 java byte 典型检索。callablestatement cstmt = con.preparecall("{call revisetotal(?)}");cstmt.setbyte(1, 25);cstmt.registeroutparameter(1, java.sql.types.tinyint);cstmt.executeupdate();byte x = 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 参数中的值大概会是 jdbc null。当展示这种景象时,将对 jdbc null 值举行变换以使 getxxx 本领所归来的值为 null、0 或 false,这在于于 getxxx 本领典型。对于 resultset 东西,要领会 0 或 false 能否源于 jdbc null 的独一本领,是用本领 wasnull 举行检验和测定。即使 getxxx 本领读取的结果一个值是 jdbc null,则该本领归来 true,要不归来 flase。第 5 节“resultset”将给出精细消息。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.