|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
概述
CallableStatement对象为一切的DBMS供应了一种以尺度情势挪用已贮存历程的办法。已贮存历程贮存在数据库中。对已贮存历程的挪用是CallableStatement对象所含的内容。这类挪用是用一种换码语法来写的,有两种情势:一种情势带了局参,另外一种情势不带了局参数。了局参数是一种输入(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。
1、创立CallableStatement对象
CallableStatement对象是用Connection办法prepareCall创立的。下例创立CallableStatement的实例,个中含有对已贮存历程getTestData挪用。该历程有两个变量,但不含了局参数:
CallableStatementcstmt=con.prepareCall("{callgetTestData(?,?)}");
个中?占位符为IN、OUT仍是INOUT参数,取决于已贮存历程getTestData。
2、IN和OUT参数
将IN参数传给CallableStatement对象是经由过程setXXX办法完成的。该办法承继自PreparedStatement。所传进参数的范例决意了所用的setXXX办法(比方,用setFloat来传进float值等)。
假如已贮存历程前往OUT参数,则在实行CallableStatement对象之前必须先注册每一个OUT参数的JDBC范例(这是必须的,由于某些DBMS请求JDBC范例)。注册JDBC范例是用registerOutParameter办法来完成的。语句实行完后,CallableStatement的getXXX办法将取回参数值。准确的getXXX办法是为各参数所注册的JDBC范例所对应的Java范例。换言之,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值的特别机制。
<p>
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。 |
|