??xml version="1.0" encoding="utf-8" standalone="yes"?>
Methods:
1?span style="FONT: 7pt 'Times New Roman'"> void add Q?span lang="EN-US">Object objQ?/span>
往ArrayList的对象里增加一个元?span lang="EN-US">
2?span style="FONT: 7pt 'Times New Roman'">
set
(int index,
Object
element)
用指定的元素替代此列表中指定位置上的元素?/span>
3?span style="FONT: 7pt 'Times New Roman'">
int size
Q)
获得ArrayList的对象中元素的个数?span lang="EN-US">
4?span style="FONT: 7pt 'Times New Roman'">
get
Q?span lang="EN-US">int index)
q回ArrayList的对象中索引?span lang="EN-US">index的元素?span lang="EN-US">
5?span style="FONT: 7pt 'Times New Roman'">
Object
[]
toArray
Q)
?span lang="EN-US">ArrayList的对象中的元素返回到一个对象数l中?span lang="EN-US">
PS
Q?span lang="EN-US">Arrays.asList(Object[] objs);
q回一个受指定数组支持的固定大的列表?/span>
q里?span lang="EN-US">L是通过Arrays.asListq回一个接口。这时?span lang="EN-US">L的长度就固定不能再变了,不能l?span lang="EN-US">Ld元素了。但是可以通过setҎ改变L中指定元素的倹{?span lang="EN-US">
6?span style="FONT: 7pt 'Times New Roman'">
iterator()
q回一个P代器。所有?span lang="EN-US">Collection接口的接口或者这些接口的实现c,都有q个Ҏ。通过List接口对象q回的P代器没有实现iterator接口中的removeҎ。凡是没有实?span lang="EN-US">iterator接口中的removeҎQ都会抛Z?/span>
UnsupportedOperationException
Q不支持的操作)异常。如Q?/span>
PS
QP代器的作用:
他可以以一U通用的方式去讉K集合中的所有元素。在ArrayListcM可以通过getҎ去访问,但是有些集合的实现类中ƈ没有getҎ。而我们知道,所有?span lang="EN-US">Collection接口的接口或者这些接口的实现c,都可以通过iterator()q回一个P代器Q那么我们就可以通过q代器这U通用的方式去讉K集合中的所有元素了。访问方法如下:
ArrayList
底层采用数组完成Q?span lang="EN-US">LinkedList则是以一般的双向链表(double-linked list)完成Q其内每个对象除了数据本w外Q还有两个引用,分别指向前一个元素和后一个元素?span lang="EN-US">
如果我们l常?span lang="EN-US">List的开始处增加元素Q或者在List中进行插入和删除操作Q我们应该?span lang="EN-US">LinkedListQ否则的话,使用ArrayList更加快速?span lang="EN-US">
q两个类都不是同步的Q因此他们的效率也比较高。如果要实现同步Q可以?span lang="EN-US">Vectorc,VectorcM有一些承的操作Q用的时候要心Q如果不实现同步一般都不用VectorcR还可以?span lang="EN-US">Collectionscȝ
synchronized
相关Ҏ实现同步Q不q效率没?/span>
Vector
c高?span lang="EN-US">
CallableStatement 对象为所有的 DBMS 提供了一U以标准形式调用已储存过E的Ҏ。已储存q程储存在数据库中。对已储存过E的调用?CallableStatement对象所含的内容。这U调用是用一U换码语法来写的Q有两种形式Q一UŞ式带l果参,另一UŞ式不带结果参数。结果参数是一U输?(OUT) 参数Q是已储存过E的q回倹{两UŞ式都可带有数量可变的输入QIN 参数Q、输出(OUT 参数Q或输入和输出(INOUT 参数Q的参数。问号将用作参数的占位符?/font>
?JDBC 中调用已储存q程的语法如下所C。注意,Ҏ可C其间的内容是可选项Q方括号本nq不是语法的l成部䆾?/font>
{call q程名[(?, ?, ...)]}
q回l果参数的过E的语法为:
{? = call q程名[(?, ?, ...)]}
不带参数的已储存q程的语法类|
{call q程名}
通常Q创?CallableStatement 对象的h应当知道所用的 DBMS 是支持已储存q程的,q且知道q些q程都是些什么。然而,如果需要检查,多种DatabaseMetaData Ҏ都可以提供这L信息。例如,如果 DBMS 支持已储存过E的调用Q则supportsStoredProcedures Ҏ返?trueQ而getProcedures Ҏ返回对已储存过E的描述。CallableStatement l承 Statement 的方法(它们用于处理一般的 SQL 语句Q,q承了 PreparedStatement 的方法(它们用于处理 IN 参)?/font>
CallableStatement 中定义的所有方法都用于处理 OUT 参数?INOUT 参数的输出部分:注册 OUT 参数?JDBC cdQ一?SQL cdQ、从q些参数中检索结果,或者检查所q回的值是否ؓ JDBC NULL?/font>
1、创?CallableStatement 对象
CallableStatement 对象是用 Connection Ҏ prepareCall 创徏的。下例创?CallableStatement 的实例,其中含有对已储存q程 getTestData 调用。该q程有两个变量,但不含结果参敎ͼ
CallableStatement cstmt = con.prepareCall("{call getTestData(?, ?)}");
其中?占位WؓIN、OUTq是INOUT参数Q取决于已储存过EgetTestData?/font>
2、IN和OUT参数
IN参数传给 CallableStatement 对象是通过 setXXX Ҏ完成的。该Ҏl承?PreparedStatement。所传入参数的类型决定了所用的setXXXҎQ例如,?setFloat 来传?float 值等Q?/font>
如果已储存过E返?OUT 参数Q则在执?CallableStatement 对象以前必须先注册每?OUT 参数?JDBC cdQ这是必需的,因ؓ某些 DBMS 要求 JDBC cdQ。注?JDBC cd是用 registerOutParameter Ҏ来完成的。语句执行完后,CallableStatement ?getXXX Ҏ取回参数倹{正的 getXXX Ҏ是ؓ各参数所注册?JDBC cd所对应?Java cd。换a之, registerOutParameter 使用的是 JDBC cdQ因此它与数据库q回?JDBC cd匚wQ,?getXXX 之转换?Java cd?/font>
作ؓCZQ下qC码先注册 OUT 参数Q执行由 cstmt 所调用的已储存q程Q然后检索在 OUT 参数中返回的倹{方?getByte 从第一?OUT 参数中取Z?Java 字节Q?getBigDecimal 从第二个 OUT 参数中取Z?BigDecimal 对象Q小数点后面带三位数Q:
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 不同Q它不提供用增量方式索大 OUT 值的Ҏ机制?/font>
3、INOUT参数
既支持输入又接受输出的参敎ͼINOUT 参数Q除了调?registerOutParameter Ҏ外,q要求调用适当?setXXX ҎQ该Ҏ是从 PreparedStatement l承来的Q。setXXX Ҏ参数D|ؓ输入参数Q?registerOutParameter Ҏ它?JDBC cd注册出参数。setXXX Ҏ提供一?Java |而驱动程序先把这个D{换ؓ JDBC |然后它送到数据库中。这U?IN 值的 JDBC cd和提供给 registerOutParameter Ҏ?JDBC cd应该相同。然后,要检索输出|p用对应的 getXXX Ҏ。例如,Java cd为byte 的参数应该用方?setByte 来赋输入倹{应该给registerOutParameter 提供cd?TINYINT ?JDBC cdQ同时应使用 getByte 来检索输出倹{?/font>
下例假设有一个已储存q程 reviseTotalQ其唯一参数?INOUT 参数。方法setByte 把此参数设ؓ 25Q驱动程序将把它作ؓ JDBC TINYINT cd送到数据库中。接着QregisterOutParameter 该参数注册?JDBC TINYINT。执行完该已储存q程后,返回一个新?JDBC TINYINT 倹{方?getByte 把q个新g?Java byte cd索?/font>
CallableStatement cstmt = con.prepareCall("{call reviseTotal(?)}");
cstmt.setByte(1, 25);
cstmt.registerOutParameter(1, java.sql.Types.TINYINT);
cstmt.executeUpdate();
byte x = cstmt.getByte(1);
4、先索结果,再检?OUT 参数
׃某些 DBMS 的限ӞZ实现最大的可移植性,先检索由执行CallableStatement 对象所产生的结果,然后再用 CallableStatement.getXXX Ҏ来检?OUT 参数。如?CallableStatement 对象q回多个 ResultSet 对象Q通过调用 execute ҎQ,在检?OUT 参数前应先检索所有的l果。这U情况下Qؓ保Ҏ有的l果都进行了讉KQ必d Statement Ҏ getResultSet、getUpdateCount 和getMoreResults q行调用Q直C再有l果为止?/font>
索完所有的l果后,可?CallableStatement.getXXX Ҏ来检?OUT 参数中的倹{?/font>
5、检索作为OUT参数的NULL?/font>
q回?OUT 参数中的值可能会是JDBC NULL。当出现q种情ŞӞ对 JDBC NULL D行{换以?getXXX Ҏ所q回的gؓ null? ?falseQ这取决于getXXX Ҏcd。对?ResultSet 对象Q要知道0或false是否源于JDBCNULL的唯一ҎQ是用方法wasNullq行。如?getXXX Ҏd的最后一个值是 JDBC NULLQ则该方法返?trueQ否则返?flase?br />