??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久久久亚洲精品,中文字幕区一区二区三,美女国产一区二区 http://www.aygfsteel.com/kook/category/13725.htmlzh-cnTue, 27 Feb 2007 12:32:12 GMTTue, 27 Feb 2007 12:32:12 GMT60ArrayList的用?/title><link>http://www.aygfsteel.com/kook/articles/71604.html</link><dc:creator>kook</dc:creator><author>kook</author><pubDate>Sun, 24 Sep 2006 14:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/kook/articles/71604.html</guid><wfw:comment>http://www.aygfsteel.com/kook/comments/71604.html</wfw:comment><comments>http://www.aygfsteel.com/kook/articles/71604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kook/comments/commentRss/71604.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kook/services/trackbacks/71604.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <font face="Verdana">他是<span lang="EN-US">List</span>接口的实现类?font color="#000000"><span lang="EN-US">ArrayList</span>cȝ当于是一个动态数l?span lang="EN-US"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></font></font> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <font face="Verdana">Methods:<o:p></o:p></font> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> <span style="mso-list: Ignore">1?span style="FONT: 7pt 'Times New Roman'"><font size="2">  </font></span></span> </span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">void add</span> <font size="2"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Q?span lang="EN-US">Object obj</span>Q?/span> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <font face="Verdana">往<span lang="EN-US">ArrayList</span>的对<font style="BACKGROUND-COLOR: #ffffff">象里增加一个元?span lang="EN-US"><o:p></o:p></span></font></font> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <font face="Verdana"> <code> <span lang="EN-US" style="FONT-SIZE: 10pt"> <span style="mso-list: Ignore">2?span style="FONT: 7pt 'Times New Roman'"><font size="2">  </font></span></span> </span> </code> <code> <span lang="EN-US" style="FONT-SIZE: 10pt; mso-bidi-font-weight: bold"> <a href="mk:@MSITStore:L:\Temp\JavaAPI\JDK150中文W五?chm::/Java_Api/gceclub.sun.com.cn/download/Java_Docs/html/zh_CN/api/java/util/ArrayList.html#set(int, E)"> <span style="COLOR: windowtext; TEXT-DECORATION: none; mso-bidi-font-family: 'Times New Roman'; text-underline: none">set</span> </a> </span> </code> <code> <span lang="EN-US" style="FONT-SIZE: 10pt">(int index, </span> </code> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Object</span> <font size="2"> <code> <span lang="EN-US" style="FONT-SIZE: 10pt"> element)<o:p></o:p></span> </code> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"> <font face="Verdana"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt">用指定的元素替代此列表中指定位置上的元素?/span> <font size="2"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <o:p> </o:p> </span> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> <span style="mso-list: Ignore">3?span style="FONT: 7pt 'Times New Roman'"><font size="2">  </font></span></span> </span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">int size</span> <font size="2"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Q)<span lang="EN-US"><o:p></o:p></span></span> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <font face="Verdana">获得<span lang="EN-US">ArrayList</span>的对象中元素的个数?span lang="EN-US"><o:p></o:p></span></font> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> <span style="mso-list: Ignore">4?span style="FONT: 7pt 'Times New Roman'"><font size="2">  </font></span></span> </span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">get</span> <font size="2"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Q?span lang="EN-US">int index)<o:p></o:p></span></span> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <font face="Verdana">q回<span lang="EN-US">ArrayList</span>的对象中索引?span lang="EN-US">index</span>的元素?span lang="EN-US"><o:p></o:p></span></font> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> <span style="mso-list: Ignore">5?span style="FONT: 7pt 'Times New Roman'"><font size="2">  </font></span></span> </span> <code> <span lang="EN-US" style="FONT-SIZE: 10pt"> <a title="java.lang 中的c? href="mk:@MSITStore:L:\Temp\JavaAPI\JDK150中文W五?chm::/Java_Api/gceclub.sun.com.cn/download/Java_Docs/html/zh_CN/api/java/lang/Object.html"> <span style="TEXT-DECORATION: none; mso-bidi-font-family: 'Times New Roman'; text-underline: none">Object</span> </a>[] </span> </code> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">toArray</span> <font size="2"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Q)<span lang="EN-US"><o:p></o:p></span></span> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <font face="Verdana">?span lang="EN-US">ArrayList</span>的对象中的元素返回到一个对象数l中?span lang="EN-US"><o:p></o:p></span></font> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">PS</span> <font size="2"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Q?span lang="EN-US">Arrays.asList(Object[] objs);<o:p></o:p></span></span> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <span style="mso-tab-count: 1">    </span> </span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q回一个受指定数组支持的固定大的列表?/span> <font size="2"> <br /> </font> </font> </p> <div id="wmqeeuq" class="shape" style="PADDING-RIGHT: 7.95pt; PADDING-LEFT: 7.95pt; PADDING-BOTTOM: 4.35pt; PADDING-TOP: 4.35pt" v:shape="_x0000_s1026"> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080"> 1</span> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">ArrayList al </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">new</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> ArrayList();<br /></span> <span style="COLOR: #008080"> 2</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        <br /></span> <span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        al.add(</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> Point(</span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #000000">3</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000">));<br /></span> <span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        al.add(</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> Point(</span> <span style="COLOR: #000000">4</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #000000">4</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000">));<br /></span> <span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        al.add(</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> Point(</span> <span style="COLOR: #000000">5</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #000000">5</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000">));<br /></span> <span style="COLOR: #008080"> 6</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        <br /></span> <span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_118_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_191_Open_Text.style.display='none'; Codehighlighter1_118_191_Closed_Image.style.display='inline'; Codehighlighter1_118_191_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_118_191_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_118_191_Closed_Text.style.display='none'; Codehighlighter1_118_191_Open_Image.style.display='inline'; Codehighlighter1_118_191_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />        </span> <span id="Codehighlighter1_118_191_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span> </font> </font> <span id="Codehighlighter1_118_191_Open_Text"> <font face="Verdana"> <font size="2"> <span style="COLOR: #008000">/*</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #008000">for(int i=0;i<al.size();i++)<br /></span> <span style="COLOR: #008080"> 8</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #008000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        {<br /></span> <span style="COLOR: #008080"> 9</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #008000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(al.get(i));<br /></span> <span style="COLOR: #008080">10</span> <span style="COLOR: #008000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span> <span style="COLOR: #008000">*/</span> </font> </font> </span> <span style="COLOR: #000000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">11</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        <br /></span> <span style="COLOR: #008080">12</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        System.out.println(al);<br /></span> <span style="COLOR: #008080">13</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        Object[] objs </span> <span style="COLOR: #000000">=</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> al.toArray();<br /></span> <span style="COLOR: #008080">14</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        System.out.println(Arrays.toString(objs));<br /></span> <span style="COLOR: #008080">15</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        List L </span> <span style="COLOR: #000000">=</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> Arrays.asList(objs);<br /></span> <span style="COLOR: #008080">16</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </font> </font> </div> <br /> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <font style="BACKGROUND-COLOR: #ffffff" face="Verdana" size="2"> </font> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"> <font face="Verdana" size="2"> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 20pt; TEXT-INDENT: -20pt; mso-char-indent-count: -2.0"> <font style="BACKGROUND-COLOR: #ffffff"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <span style="mso-tab-count: 2">    </span> </span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <font style="BACKGROUND-COLOR: #ffffff">q里?span lang="EN-US">L</span>是通过<span lang="EN-US">Arrays.asList</span>q回一个接口。这时?span lang="EN-US">L</span>的长度就固定不能再变了,不能l?span lang="EN-US">L</span>d元素了。但是可以通过<span lang="EN-US">set</span>Ҏ改变<span lang="EN-US">L</span>中指定元素的倹{?span lang="EN-US"><o:p></o:p></span></font> </span> </font> </font> </p> </div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <font face="Verdana"> <font size="2"> <span lang="EN-US"> <span style="mso-tab-count: 1">      </span> </span> <span lang="EN-US"> <o:p>  </o:p> </span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">toArray</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Ҏ是将一?span lang="EN-US">List</span>对象转成一个数l,?span lang="EN-US">Arrays.asList</span>Ҏ是将一个数l{成一?span lang="EN-US">List</span>。他们是集合和数l之间的桥梁Q有时候方法中的参数可能需要数l或?span lang="EN-US">List</span>的时候,可以用C们{换,而不用去重新创徏实例?span lang="EN-US"><o:p></o:p></span></span> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: left; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt" align="left"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> <span style="mso-list: Ignore">6?span style="FONT: 7pt 'Times New Roman'"><font size="2">  </font></span></span> </span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">iterator()<o:p></o:p></span> <font size="2"> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: left" align="left"> <font face="Verdana"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">q回一个P代器。所有?span lang="EN-US">Collection</span>接口的接口或者这些接口的实现c,都有q个Ҏ。通过<span lang="EN-US">List</span>接口对象q回的P代器没有实现<span lang="EN-US">iterator</span>接口中的<span lang="EN-US">remove</span>Ҏ。凡是没有实?span lang="EN-US">iterator</span>接口中的<span lang="EN-US">remove</span>ҎQ都会抛Z?/span> <font size="2"> <u> <span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: navy; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-highlight: white">UnsupportedOperationException</span> </u> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">Q不支持的操作)异常。如Q?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <o:p> </o:p> </span> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: left" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <o:p> <font face="Verdana">  </font> </o:p> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">1</span> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">List l </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">;               </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">List 接口对象l </span> </font> </font> <span style="COLOR: #008000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">2</span> <span style="COLOR: #008000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </font> </font> <span style="COLOR: #000000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">3</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />Iterator it </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> l.iterator();  </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000"> 通过List接口对象lq回的P代器it </span> </font> </font> <span style="COLOR: #008000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">4</span> <span style="COLOR: #008000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </font> </font> <span style="COLOR: #000000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">5</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />it.next();                   </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">it 有nextҎ </span> </font> </font> <span style="COLOR: #008000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">6</span> <span style="COLOR: #008000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </font> </font> <span style="COLOR: #000000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">7</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />it.remove();                    </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000"> q里会抛出 UnsupportedOperationException </span> </font> </font> <span style="COLOR: #008000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">8</span> <span style="COLOR: #008000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </font> </font> <span style="COLOR: #000000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">9</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </font> </font> </div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: left" align="left"> <br style="mso-ignore: vglayout" clear="all" /> <font face="Verdana" size="2"> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">PS</span> <font size="2"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">QP代器的作用:<span lang="EN-US"><o:p></o:p></span></span> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 15pt; TEXT-INDENT: -15pt; TEXT-ALIGN: left; mso-char-indent-count: -1.5" align="left"> <font face="Verdana"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <span style="mso-tab-count: 1">   </span> </span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">他可以以一U通用的方式去讉K集合中的所有元素。在<span lang="EN-US">ArrayList</span>cM可以通过<span lang="EN-US">get</span>Ҏ去访问,但是有些集合的实现类中ƈ没有<span lang="EN-US">get</span>Ҏ。而我们知道,所有?span lang="EN-US">Collection</span>接口的接口或者这些接口的实现c,都可以通过<span lang="EN-US">iterator()</span>q回一个P代器Q那么我们就可以通过q代器这U通用的方式去讉K集合中的所有元素了。访问方法如下:<span lang="EN-US"><o:p></o:p></span></span> <font size="2"> <br /> </font> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 15pt; TEXT-INDENT: -15pt; TEXT-ALIGN: left; mso-char-indent-count: -1.5" align="left"> <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?> <v:shape id="_x0000_s1028" style="MARGIN-TOP: 7.8pt; Z-INDEX: 3; LEFT: 0px; VISIBILITY: hidden; MARGIN-LEFT: 18pt; WIDTH: 390pt; TEXT-INDENT: 0px; POSITION: absolute; HEIGHT: 198.9pt; TEXT-ALIGN: left" type="#_x0000_t202"> <font face="Verdana" size="2"> </font> </v:shape> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <span style="mso-tab-count: 1"> </span> </span> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080"> 1</span> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">ArrayList al </span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">new</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> ArrayList(); <br /></span> <span style="COLOR: #008080"> 2</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <br /> </span> <span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    al.add(</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> Point(</span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #000000">3</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000">)); <br /></span> <span style="COLOR: #008080"> 4</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <br /> </span> <span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    al.add(</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> Point(</span> <span style="COLOR: #000000">4</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #000000">4</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000">)); <br /></span> <span style="COLOR: #008080"> 6</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <br /> </span> <span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    al.add(</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> Point(</span> <span style="COLOR: #000000">5</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #000000">5</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000">)); <br /></span> <span style="COLOR: #008080"> 8</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <br /> </span> <span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />Iterator it1 </span> <span style="COLOR: #000000">=</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> al.iterator(); <br /></span> <span style="COLOR: #008080">10</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <br /> </span> <span style="COLOR: #008080">11</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />       </span> <span style="COLOR: #0000ff">while</span> <span style="COLOR: #000000">(it.hasNext())                     </span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000"> 通过q代器访问集合元素?/span> </font> </font> <span style="COLOR: #008000"> <br /> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #008080">12</span> <span style="COLOR: #008000"> <img id="Codehighlighter1_226_282_Open_Image" onclick="this.style.display='none'; Codehighlighter1_226_282_Open_Text.style.display='none'; Codehighlighter1_226_282_Closed_Image.style.display='inline'; Codehighlighter1_226_282_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_226_282_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_226_282_Closed_Text.style.display='none'; Codehighlighter1_226_282_Open_Image.style.display='inline'; Codehighlighter1_226_282_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span> <span style="COLOR: #000000">       </span> <span id="Codehighlighter1_226_282_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> </font> </font> <span id="Codehighlighter1_226_282_Open_Text"> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000">{ <br /></span> <span style="COLOR: #008080">13</span> </font> </font> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />              System.out.println(it.next()); <br /></span> <span style="COLOR: #008080">14</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />       }</span> </font> </font> </span> <font face="Verdana"> <font size="2"> <span style="COLOR: #000000"> <br /></span> <span style="COLOR: #008080">15</span> <span style="COLOR: #000000"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </font> </font> </div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 15pt; TEXT-INDENT: -15pt; TEXT-ALIGN: left; mso-char-indent-count: -1.5" align="left"> <br /> <font face="Verdana" size="2"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">ArrayList</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">底层采用数组完成Q?span lang="EN-US">LinkedList</span>则是以一般的双向链表<span lang="EN-US">(double-linked list)</span>完成Q其内每个对象除了数据本w外Q还有两个引用,分别指向前一个元素和后一个元素?span lang="EN-US"><o:p></o:p></span></span> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"> <font face="Verdana">如果我们l常?span lang="EN-US">List</span>的开始处增加元素Q或者在<span lang="EN-US">List</span>中进行插入和删除操作Q我们应该?span lang="EN-US">LinkedList</span>Q否则的话,使用<span lang="EN-US">ArrayList</span>更加快速?span lang="EN-US"><o:p></o:p></span></font> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left"> <font face="Verdana"> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">q两个类都不是同步的Q因此他们的效率也比较高。如果要实现同步Q可以?span lang="EN-US">Vector</span>c,<span lang="EN-US">Vector</span>cM有一些承的操作Q用的时候要心Q如果不实现同步一般都不用<span lang="EN-US">Vector</span>cR还可以?span lang="EN-US">Collections</span>cȝ</span> <font size="2"> <code> <span lang="EN-US" style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt"> <a href="mk:@MSITStore:L:\Temp\JavaAPI\JDK150中文W五?chm::/Java_Api/gceclub.sun.com.cn/download/Java_Docs/html/zh_CN/api/java/util/Collections.html#synchronizedCollection(java.util.Collection)"> <span style="COLOR: windowtext; TEXT-DECORATION: none; mso-bidi-font-family: 'Times New Roman'; text-underline: none">synchronized</span> </a> </span> </code> <code> <span style="FONT-SIZE: 10pt; mso-bidi-font-size: 12.0pt">相关Ҏ实现同步Q不q效率没?/span> </code> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">Vector</span> <span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">c高?span lang="EN-US"><o:p></o:p></span></span> </font> </font> </p> <img src ="http://www.aygfsteel.com/kook/aggbug/71604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kook/" target="_blank">kook</a> 2006-09-24 22:31 <a href="http://www.aygfsteel.com/kook/articles/71604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CallableStatement 接口http://www.aygfsteel.com/kook/articles/61587.htmlkookkookThu, 03 Aug 2006 12:35:00 GMThttp://www.aygfsteel.com/kook/articles/61587.htmlhttp://www.aygfsteel.com/kook/comments/61587.htmlhttp://www.aygfsteel.com/kook/articles/61587.html#Feedback0http://www.aygfsteel.com/kook/comments/commentRss/61587.htmlhttp://www.aygfsteel.com/kook/services/trackbacks/61587.html 概述

  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 />

 1 package  jdbc;
 2
 3 /*
 4  * Created on 2004-6-1
 5  *
 6  * 主要考查CallableStatement较细节的用法?br />  7  * 如:取out参数Q取q回|多个l果集等.
 8  * 
 9  * 
10   */

11
12 /**
13  *  @author  zw
14  *
15  * To change the template for this generated type comment go to
16  * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
17   */

18 import  java.sql. * ;
19 public   class  CCallSP  {
20     
21     Connection conn;        
22     Statement cmd;
23     PreparedStatement pCmd;
24     CallableStatement callCmd;        
25     ResultSet rs;
26     
27      public   void  initConn()
28      {
29         String driver = " com.microsoft.jdbc.sqlserver.SQLServerDriver " ;
30         String url = " jdbc:microsoft:sqlserver://localhost:1433;databasename=northwind " ;
31         String uName = " sa " ;
32         String uPwd = " sa " ;
33          try {
34             Class.forName(driver);
35             conn = DriverManager.getConnection(url,uName,uPwd);
36             String callSql = " {?= call procQuery(?,?)} " ;
37             callCmd = conn.prepareCall(callSql);            
38             callCmd.registerOutParameter( 1 ,Types.INTEGER);            
39             callCmd.setInt( 2 , 10248 );
40             callCmd.registerOutParameter( 3 ,Types.INTEGER);
41              if (callCmd.execute() == true ) { // q回l果?br /> 42                  // W一个结果集
43                 rs = callCmd.getResultSet();
44                  while (rs.next())
45                  {
46                     System.out.println(rs.getInt( " orderid " ) + "   " +
47                                        rs.getString( " customerid " ) + "   " +
48                                        rs.getDate( " Orderdate " ));                    
49                 }

50                  // W二个结果集
51                 callCmd.getMoreResults();
52                 rs = callCmd.getResultSet();
53                  while (rs.next())
54                  {
55                     System.out.println(rs.getInt( " ProductID " ) + "  |  " +
56                                        rs.getString( " UnitPrice " ) + "  |  " +
57                                        rs.getInt( " quantity " ));                    
58                 }

59                  // 输出参数和返回?/span>
60                 System.out.println();
61                 System.out.println( " return= " + callCmd.getInt( 1 ));
62                 System.out.println( " out= " + callCmd.getInt( 3 ));            
63             }

64         }

65          catch (Exception e) {
66             e.printStackTrace();
67             System.out.println(e.getMessage());            
68         }

69     }

70      // test coding
71      public   static   void  main(String[] args)  {
72         CCallSP call = new  CCallSP();
73         call.initConn();    
74     }

75 }

76

 

 



kook 2006-08-03 20:35 发表评论
]]>
PreparedStatement 接口http://www.aygfsteel.com/kook/articles/61511.htmlkookkookThu, 03 Aug 2006 06:40:00 GMThttp://www.aygfsteel.com/kook/articles/61511.htmlhttp://www.aygfsteel.com/kook/comments/61511.htmlhttp://www.aygfsteel.com/kook/articles/61511.html#Feedback0http://www.aygfsteel.com/kook/comments/commentRss/61511.htmlhttp://www.aygfsteel.com/kook/services/trackbacks/61511.html?PreparedStatement 接口l承 StatementQƈ与之在两斚w有所不同Q?


PreparedStatement 实例包含已编译的 SQL 语句。这是使语句“准备好”?
包含?PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN 参数的值在 SQL 语句创徏时未被指定。相反的Q该语句为每?IN 参数保留一个问P“?”)作ؓ占位W。每个问L值必d该语句执行之前,通过适当?setXXX Ҏ来提供?

׃ PreparedStatement 对象已预~译q,所以其执行速度要快?Statement 对象。因此,多次执行?SQL 语句l常创徏?PreparedStatement 对象Q以提高效率?br />
作ؓ Statement 的子c,PreparedStatement l承?Statement 的所有功能。另外它q添加了一整套ҎQ用于设|发送给数据库以取代 IN 参数占位W的倹{同Ӟ三种Ҏ execute?executeQuery ?executeUpdate 已被更改以之不再需要参数。这些方法的 Statement 形式Q接?SQL 语句参数的Ş式)不应该用?PreparedStatement 对象?br />

6.1.1 创徏 PreparedStatement 对象
以下的代码段Q其?con ?Connection 对象Q创建包含带两个 IN 参数占位W的 SQL 语句?PreparedStatement 对象Q?

PreparedStatement pstmt = con.prepareStatement(
"UPDATE table4 SET m = ? WHERE x = ?");

pstmt 对象包含语句 "UPDATE table4 SET m = ? WHERE x = ?"Q它已发送给 DBMSQƈ为执行作好了准备?br />

6.1.2 传?IN 参数
在执?PreparedStatement 对象之前Q必设|每?? 参数的倹{这可通过调用 setXXX Ҏ来完成,其中 XXX 是与该参数相应的cd。例如,如果参数h Java cd longQ则使用的方法就?setLong。setXXX Ҏ的第一个参数是要设|的参数的序C|,W二个参数是讄l该参数的倹{例如,以下代码第一个参数设?123456789Q第二个参数设ؓ 100000000Q?

pstmt.setLong(1, 123456789);
pstmt.setLong(2, 100000000);

一旦设|了l定语句的参数|可用它多次执行该语句,直到调用 clearParameters Ҏ清除它ؓ止?br />
在连接的~省模式下(启用自动提交Q,当语句完成时自动提交或q原该语句?br />
如果基本数据库和驱动E序在语句提交之后仍保持q些语句的打开状态,则同一?PreparedStatement 可执行多ơ。如果这一点不成立Q那么试N过使用 PreparedStatement 对象代替 Statement 对象来提高性能是没有意义的?br />
利用 pstmtQ前面创建的 PreparedStatement 对象Q,以下代码例示了如何设|两个参数占位符的值ƈ执行 pstmt 10 ơ。如上所qͼ为做到这一点,数据库不能关?pstmt。在该示例中Q第一个参数被讄?"Hi"q保持ؓ常数。在 for 循环中,每次都将W二个参数设|ؓ不同的|?0 开始,?9 l束?br />
pstmt.setString(1, "Hi");
for (int i = 0; i < 10; i++) {
pstmt.setInt(2, i);
int rowCount = pstmt.executeUpdate();
}

6.1.3 IN 参数中数据类型的一致?br />setXXX Ҏ中的 XXX ?Java cd。它是一U隐含的 JDBC cdQ一?SQL cdQ,因ؓ驱动E序把 Java cd映射为相应的 JDBC cdQ遵循该 JDBC Guide中?.6.2 “映?Java ?JDBC cd”表中所指定的映)Qƈ该 JDBC cd发送给数据库。例如,以下代码D将 PreparedStatement 对象 pstmt 的第二个参数讄?44QJava cd?shortQ?

pstmt.setShort(2, 44);

驱动E序?44 作ؓ JDBC SMALLINT 发送给数据库,它是 Java short cd的标准映?br />
E序员的责Q是确保将每个 IN 参数?Java cd映射Z数据库所需?JDBC 数据cd兼容?JDBC cd。不妨考虑数据库需?JDBC SMALLINT 的情c如果用方?setByte Q则驱动E序?JDBC TINYINT 发送给数据库。这是可行的Q因多数据库可从一U相关的cd转换为另一U类型,q且通常 TINYINT 可用?SMALLINT 适用的Q何地斏V然而,对于要适用于尽可能多的数据库的应用E序Q最好用与数据库所需的确切的 JDBC cd相应?Java cd。如果所需?JDBC cd?SMALLINTQ则使用 setShort 代替 setByte 应用E序的可UL性更好?br />

6.1.4 使用 setObject
E序员可使用 setObject Ҏ昑ּ地将输入参数转换为特定的 JDBC cd。该Ҏ可以接受W三个参敎ͼ用来指定目标 JDBC cd。将 Java Object 发送给数据库之前,驱动E序把它{换ؓ指定?JDBC cd?br />
如果没有指定 JDBC cdQ驱动程序就会将 Java Object 映射到其~省?JDBC cdQ参见第 8.6.4 节中的表|Q然后将它发送到数据库。这与常规的 setXXX ҎcMQ在q两U情况下Q驱动程序在值发送到数据库之前,会将该值的 Java cd映射为适当?JDBC cd。二者的差别在于 setXXX Ҏ使用?Java cd?JDBC cd的标准映(参见W?8.6.2 节中的表|Q?setObject Ҏ使用?Java Object cd?JDBC cd的映(参见W?8.6.4 节中的表|?br />
Ҏ setObject 允许接受所?Java 对象的能力应用E序更ؓ通用Qƈ可在q行时接受参数的输入。这U情况下Q应用程序在~译时ƈ不清楚输入类型。通过使用 setObjectQ应用程序可接受所?Java 对象cd作ؓ输入Qƈ其转换为数据库所需?JDBC cd。第 8.6.5 节中的表格显CZ setObject 可执行的所有可能{换?br />

6.1.5 ?JDBC NULL 作ؓ IN 参数发?br />setNull Ҏ允许E序员将 JDBC NULL g?IN 参数发送给数据库。但要注意,仍然必须指定参数?JDBC cd?br />
当把 Java null g递给 setXXX ҎӞ如果它接?Java 对象作ؓ参数Q,也将同样?JDBC NULL 发送到数据库。但仅当指定 JDBC cdӞҎ setObject 才能接受 null 倹{?br />

6.1.6 发送大?IN 参数
setBytes ?setString Ҏ能够发送无限量的数据。但是,有时E序员更喜欢用较的块传递大型的数据。这可通过?IN 参数讄?Java 输入来完成。当语句执行ӞJDBC 驱动E序重复调用该输入,d其内容ƈ它们当作实际参数数据传输?br />
JDBC 提供了三U将 IN 参数讄入流的方法:setBinaryStream 用于含有未说明字节的, setAsciiStream 用于含有 ASCII 字符的流Q?setUnicodeStream 用于含有 Unicode 字符的流。因为必L定流的总长度,所以这些方法所采用的参数比其它?setXXX Ҏ要多一个。这很有必要Q因Z些数据库在发送数据之前需要知道其ȝ传送大?br />
以下代码例示了用流作ؓ IN 参数来发送文件内容:

java.io.File file = new java.io.File("/tmp/data");
int fileLength = file.length();
java.io.InputStream fin = new java.io.FileInputStream(file);
java.sql.PreparedStatement pstmt = con.prepareStatement(
"UPDATE Table5 SET stuff = ? WHERE index = 4");
pstmt.setBinaryStream (1, fin, fileLength);
pstmt.executeUpdate();

当语句执行时Q将反复调用输入?fin 以传递其数据?br />


kook 2006-08-03 14:40 发表评论
]]>
վ֩ģ壺 ¤| | | | | | | ľ| | | μ| ȫ| | ½| | ƽ| ֹ| | | | DZ| | | ն| | | ƽ| | | | | | | Դ| ϲ| ƽ| | DZɽ| | | |