﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Youngsun's Java World-文章分类-db</title><link>http://www.blogjava.net/youngsun/category/32229.html</link><description>徘徊于牛A和牛C之间</description><language>zh-cn</language><lastBuildDate>Thu, 28 Aug 2008 15:59:42 GMT</lastBuildDate><pubDate>Thu, 28 Aug 2008 15:59:42 GMT</pubDate><ttl>60</ttl><item><title>使用数据库连接池</title><link>http://www.blogjava.net/youngsun/articles/225443.html</link><dc:creator>Hiro</dc:creator><author>Hiro</author><pubDate>Thu, 28 Aug 2008 15:50:00 GMT</pubDate><guid>http://www.blogjava.net/youngsun/articles/225443.html</guid><wfw:comment>http://www.blogjava.net/youngsun/comments/225443.html</wfw:comment><comments>http://www.blogjava.net/youngsun/articles/225443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngsun/comments/commentRss/225443.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngsun/services/trackbacks/225443.html</trackback:ping><description><![CDATA[<strong>
<p><strong>使用数据库连接池</strong></p>
<p>如果不能从JNDI获取数据源，那么下一个选择应该是在Spring里直接配置一个数据源池。虽然Spring没有提供一个数据源池，但Jakarta Commons Database Connection Pools（DBCP）项目（<a href="http://jakarta.apache.org/commons/dbcp">http://jakarta.apache.org/commons/dbcp</a>）提供了一个。为了把DBCP添加到程序，我们可以下载它并把JAR文件放到Ant的生成类路径里，或是把如下&lt;dependency&gt;添加到Maven 2 Project Object Model（POM）：</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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">commons-dbcp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">commons-dbcp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1.2.1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p>DBCP包含多个提供池功能的数据源，BasicDataSource是最常用的一个，因为在Spring里配置它很容易，而且它类似于Spring自己的DriveManagerDataSource（稍后会有所介绍）。</p>
<p>对于RaodRantz程序，我们会像下面这样配置BasicDataSource Bean：</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"><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="dataSource" </span><span style="color: #ff0000">class</span><span style="color: #0000ff">="org.apache.commons.dbcp.BasicDataSource"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="driverClassName" </span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="com.mysql.jdbc.Driver"</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="url"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="jdbc:mysql://localhost:3306/bank"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="username"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="root"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="password"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="123456"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="initialSize"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="5"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="maxActive"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="10"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span></div>
<p>前4个属性是配置BasicDataSource所必需的。driverClassName属性指定JDBC驱动类的完整修饰名称，在此我们把它配置为Hypersonic数据库的JDBC驱动。url属性用于设置数据库的完整JDBC URL。最后，username和password属性用于在连接到数据库时进行身份验证。</p>
<p>这4个基本属性定义了BasicDataSource的连接信息。另外，我们还可以使用其他一些属性来配置数据源池，表5.4列出了BasicDataSource中最有用的一些池配置属性。</p>
<p>表5.4&nbsp;BasicDataSource的池配置属性</p>
<p>
<table class="MsoNormalTable" style="border-right: medium none; border-top: medium none; margin: auto auto auto 5.4pt; border-left: medium none; width: 340pt; border-bottom: medium none; border-collapse: collapse; mso-border-top-alt: solid black .75pt; mso-border-bottom-alt: solid black .75pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid black; mso-border-insidev: .5pt solid black" cellspacing="0" cellpadding="0" width="453" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 110pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-top-alt: solid black .75pt; mso-border-bottom-alt: solid black .5pt; mso-border-right-alt: solid black .5pt" width="147">
            <p class="a0" style="margin: 2.5pt 0cm"><font size="1"><font face="Arial"><span style="font-family: 方正黑体简体; mso-ascii-font-family: Arial">池配置属性</span><span lang="EN-US"><o:p></o:p></span></font></font></p>
            </td>
            <td style="padding-right: 5.4pt; border-top: black 1pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 230pt; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; border-right-color: #ece9d8; mso-border-top-alt: solid black .75pt; mso-border-bottom-alt: solid black .5pt; mso-border-left-alt: solid black .5pt" width="307">
            <p class="a0" style="margin: 2.5pt 0cm"><font size="1"><font face="Arial"><span style="font-family: 方正黑体简体; mso-ascii-font-family: Arial">指定的内容</span><span lang="EN-US"><o:p></o:p></span></font></font></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1">
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 110pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-right-alt: solid black .5pt" width="147">
            <p class="a" style="margin: 2.5pt 0cm"><span lang="EN-US"><font size="1"><span style="font-size: 10pt">initialSize<o:p></o:p></span></font></span></p>
            </td>
            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 230pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; border-right-color: #ece9d8; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-left-alt: solid black .5pt" width="307">
            <p class="a" style="margin: 2.5pt 0cm"><font size="1"><span style="font-size: 10pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">池启动时创建的连接数量</span><span lang="EN-US"><o:p></o:p></span></span></font></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 2">
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 110pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-right-alt: solid black .5pt" width="147">
            <p class="a" style="margin: 2.5pt 0cm"><span lang="EN-US"><font size="1"><span style="font-size: 10pt">maxActive<o:p></o:p></span></font></span></p>
            </td>
            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 230pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; border-right-color: #ece9d8; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-left-alt: solid black .5pt" width="307">
            <p class="a" style="margin: 2.5pt 0cm"><font size="1"><span style="font-size: 10pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同一时间可以从池分配的最多连接数量。设置为</span><span lang="EN-US">0</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时表示无限制。</span><span lang="EN-US"><o:p></o:p></span></span></font></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 3">
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 110pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-right-alt: solid black .5pt" width="147">
            <p class="a" style="margin: 2.5pt 0cm"><span lang="EN-US"><font size="1"><span style="font-size: 10pt">maxIdle<o:p></o:p></span></font></span></p>
            </td>
            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 230pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; border-right-color: #ece9d8; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-left-alt: solid black .5pt" width="307">
            <p class="a" style="margin: 2.5pt 0cm"><font size="1"><span style="font-size: 10pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">池里不会被释放的最多空闲连接数量。设置为</span><span lang="EN-US">0</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时表示无限制。</span><span lang="EN-US"><o:p></o:p></span></span></font></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 4">
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 110pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-right-alt: solid black .5pt" width="147">
            <p class="a" style="margin: 2.5pt 0cm"><span lang="EN-US"><font size="1"><span style="font-size: 10pt">maxOpenPreparedStatements<o:p></o:p></span></font></span></p>
            </td>
            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 230pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; border-right-color: #ece9d8; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-left-alt: solid black .5pt" width="307">
            <p class="a" style="margin: 2.5pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span style="font-size: 10pt">同一时间能够从语句池里分配的已备语句的最大数量。</span></span><span lang="EN-US"><br />
            </span><font size="1"><span style="font-size: 10pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设置为</span><span lang="EN-US">0</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时表示无限制。</span><span lang="EN-US"><o:p></o:p></span></span></font></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 5">
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 110pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-right-alt: solid black .5pt" width="147">
            <p class="a" style="margin: 2.5pt 0cm"><span lang="EN-US"><font size="1"><span style="font-size: 10pt">maxWait<o:p></o:p></span></font></span></p>
            </td>
            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 230pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; border-right-color: #ece9d8; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-left-alt: solid black .5pt" width="307">
            <p class="a" style="margin: 2.5pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span style="font-size: 10pt">在抛出异常之前，池等待连接被回收的最长时间</span></span><span lang="EN-US"><br />
            </span><font size="1"><span style="font-size: 10pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（当没有可用连接时）。设置为</span><span lang="EN-US">-1</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示无限等待。</span><span lang="EN-US"><o:p></o:p></span></span></font></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 6">
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 110pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-right-alt: solid black .5pt" width="147">
            <p class="a" style="margin: 2.5pt 0cm"><span lang="EN-US"><font size="1"><span style="font-size: 10pt">minEvictableIdleTimeMillis<o:p></o:p></span></font></span></p>
            </td>
            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 230pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; border-right-color: #ece9d8; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-left-alt: solid black .5pt" width="307">
            <p class="a" style="margin: 2.5pt 0cm"><font size="1"><span style="font-size: 10pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">连接保持空闲而不被驱逐的最长时间。</span><span lang="EN-US"><o:p></o:p></span></span></font></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 7">
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 110pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-right-alt: solid black .5pt" width="147">
            <p class="a" style="margin: 2.5pt 0cm"><span lang="EN-US"><font size="1"><span style="font-size: 10pt">minIdle<o:p></o:p></span></font></span></p>
            </td>
            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 230pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; border-right-color: #ece9d8; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .5pt; mso-border-left-alt: solid black .5pt" width="307">
            <p class="a" style="margin: 2.5pt 0cm"><font size="1"><span style="font-size: 10pt"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在不新建连接的条件下，池中保持空闲的最少连接数。</span><span lang="EN-US"><o:p></o:p></span></span></font></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 8; mso-yfti-lastrow: yes">
            <td style="border-right: black 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 110pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .75pt; mso-border-right-alt: solid black .5pt" width="147">
            <p class="a" style="margin: 2.5pt 0cm"><span lang="EN-US"><font size="1"><span style="font-size: 10pt">poolPreparedStatements<o:p></o:p></span></font></span></p>
            </td>
            <td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 230pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: black 1pt solid; background-color: transparent; border-right-color: #ece9d8; mso-border-top-alt: solid black .5pt; mso-border-bottom-alt: solid black .75pt; mso-border-left-alt: solid black .5pt" width="307">
            <p class="a" style="margin: 2.5pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span style="font-size: 10pt">是否对已备语句进行池管理（布尔值）。</span></span><span lang="EN-US"><o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>在我们的范例里，池启动时有5个连接，在需要时可以新建连接，但最大连接数量为10。</p>
</strong>
<img src ="http://www.blogjava.net/youngsun/aggbug/225443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngsun/" target="_blank">Hiro</a> 2008-08-28 23:50 <a href="http://www.blogjava.net/youngsun/articles/225443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC驱动汇总</title><link>http://www.blogjava.net/youngsun/articles/225148.html</link><dc:creator>Hiro</dc:creator><author>Hiro</author><pubDate>Wed, 27 Aug 2008 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/youngsun/articles/225148.html</guid><wfw:comment>http://www.blogjava.net/youngsun/comments/225148.html</wfw:comment><comments>http://www.blogjava.net/youngsun/articles/225148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngsun/comments/commentRss/225148.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngsun/services/trackbacks/225148.html</trackback:ping><description><![CDATA[<p><strong>Microsoft SQL Server (6.5, 7, 2000 and 2005) and Sybase (10, 11, 12).</strong><span style="font-size: 10pt">&nbsp;&nbsp;<br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
JDBC Name: jTDS <br />
Home Page: http://jtds.sourceforge.net/ <br />
JDBC Ver: 1.0.2 <br />
Download: http://sourceforge.net/project/showfiles.php?group_id=33291 <br />
Conn Code: <br />
&nbsp;&nbsp; Class.forName("net.sourceforge.jtds.jdbc.Driver "); <br />
&nbsp;&nbsp; Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://host:port/database","user","password"); <br />
or <br />
&nbsp;&nbsp; Connection con = DriverManager.getConnection("jdbc:jtds:sybase://host:port/database","user","password"); <br />
<br />
</span><strong>Microsoft SQL Server 2000 <br />
</strong><span style="font-size: 10pt">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
JDBC Name: SQL Server 2000 Driver for JDBC <br />
Home Page: http://www.microsoft.com/china/sql/ <br />
JDBC Ver: (SQL Server 2000 Driver for JDBC) <br />
Download: http://www.microsoft.com/china/sql/downloads/2000/jdbc.asp <br />
Conn Code: <br />
&nbsp;&nbsp; Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");&nbsp;&nbsp;<br />
&nbsp;&nbsp; Connection conn = DriverManager.getConnection ("jdbc:microsoft:sqlserver://server1:1433","user","password"); <br />
<br />
</span><strong>Oracle <br />
</strong><span style="font-size: 10pt">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
JDBC Name: Connector/J&nbsp;&nbsp;<br />
Home Page: http://www.oracle.com/technology/software/tech/java/ <br />
JDBC Ver: (based on Oracle) <br />
Download: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/ <br />
Conn Code: <br />
&nbsp;&nbsp; Class.forName("oracle.jdbc.driver.OracleDriver"); <br />
&nbsp;&nbsp; Connection con = DriverManager.getConnection("jdbc:oracle:thin:@host:port:databse","user","password"); <br />
<br />
</span><strong>MySQL <br />
</strong><span style="font-size: 10pt">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
JDBC Name: Connector/J <br />
Home Page: http://dev.mysql.com/ <br />
JDBC Ver: 3.1 <br />
Download: http://dev.mysql.com/downloads/ <br />
Conn Code: <br />
&nbsp;&nbsp; Class.forName("com.mysql.jdbc.Driver"); <br />
&nbsp;&nbsp; Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password"); <br />
<br />
</span><strong>Sybase <br />
</strong><span style="font-size: 10pt">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
JDBC Name: jConnect&nbsp;&nbsp;<br />
Home Page: http://www.sybase.com.cn/cn/content/SDN/ <br />
JDBC Ver: 4.5/5.5 <br />
Download: http://www.sybase.com/detail_list?id=13&amp;morenavId=8668&amp;multi=true&amp;SR=Y&amp;show=1265 <br />
Conn Code: <br />
Class.forName("com.sybase.jdbc2.jdbc.SybDriver").newInstance(); <br />
DriverManager.getConnection("jdbc:sybase:Tds:IP:2638?ServiceName="+database,"user","password"); <br />
<br />
</span><strong>Postgresql <br />
</strong><span style="font-size: 10pt">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
JDBC Name: PostgreSQL JDBC <br />
Home Page: http://jdbc.postgresql.org/ <br />
JDBC Ver: 8.0 Build 310 <br />
Download: http://jdbc.postgresql.org/download.html <br />
Conn Code: <br />
&nbsp;&nbsp; Class.forName("org.postgresql.Driver");&nbsp;&nbsp;<br />
&nbsp;&nbsp; Connection con = DriverManager.getConnection("jdbc:postgresql://host:port/database","user","password"); <br />
<br />
</span><strong>IBM Informix <br />
</strong><span style="font-size: 10pt">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
JDBC Name: Informix JDBC Driver (IBM Informix JDBC V3.0) <br />
Home Page: http://www-306.ibm.com/software/data/informix/ <br />
JDBC Ver: 3.0.JC1 <br />
Download: http://www14.software.ibm.com/webapp/download/search.jsp?go=y&amp;rs=ifxjdbc <br />
Conn Code: <br />
&nbsp;&nbsp; Class.forName("com.informix.jdbc.IfxDriver").newInstance();&nbsp;&nbsp;<br />
&nbsp;&nbsp; Connection conn= DriverManager.getConnection("jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;user=testuser;password=testpassword";); <br />
<br />
</span><strong>IBM DB2 <br />
</strong><span style="font-size: 10pt">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
JDBC Name: DB2 JDBC Universal Driver <br />
Home Page: http://www-306.ibm.com/software/data/db2/udb/&nbsp;&nbsp;<br />
JDBC Ver:&nbsp;&nbsp;<br />
Download: http://www-128.ibm.com/developerworks/db2/downloads/jcc/ <br />
Conn Code: <br />
&nbsp;&nbsp; Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();&nbsp;&nbsp;<br />
&nbsp;&nbsp; Connection conn= DriverManager.getConnection("jdbc:db2://localhost:5000/sample",user,password);&nbsp;&nbsp;<br />
<br />
</span><strong>IBM AS400主机在用的JDBC语法 <br />
</strong><span style="font-size: 10pt">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
&nbsp;&nbsp;有装V4R4以上版本的Client Access Express <br />
&nbsp;&nbsp;可以在C:"Program Files"IBM"Client Access"jt400"lib <br />
&nbsp;&nbsp;找到 driver 档案 jt400.zip，并更改扩展名成为 jt400.jar <br />
Conn Code: <br />
&nbsp;&nbsp; java.sql.DriverManager.registerDriver (new com.ibm.as400.access.AS400JDBCDriver ()); <br />
&nbsp;&nbsp; Class.forName("com.ibm.as400.access.AS400JDBCConnection"); <br />
&nbsp;&nbsp; con = DriverManager.getConnection("jdbc:as400://IP","user","password");&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp; Db Name: Ms Access or Ms Foxpro <br />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <br />
Conn Code: <br />
&nbsp;&nbsp; step 1: 配置 odbc (例如：myDb) <br />
&nbsp;&nbsp; step 2:&nbsp;&nbsp;<br />
&nbsp;&nbsp; String dbURL = "jdbc:odbc:myDb"; <br />
&nbsp;&nbsp; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); <br />
　Connection conn = DriverManager.getConnection(dbURL);&nbsp;&nbsp;<br />
or <br />
&nbsp;&nbsp; String dbURL = "jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb)};DBQ=dabaseName.mdb"; <br />
&nbsp;&nbsp; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); <br />
　Connection conn = DriverManager.getConnection(dbURL); </span></p>
<img src ="http://www.blogjava.net/youngsun/aggbug/225148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngsun/" target="_blank">Hiro</a> 2008-08-27 21:41 <a href="http://www.blogjava.net/youngsun/articles/225148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JNDI</title><link>http://www.blogjava.net/youngsun/articles/208456.html</link><dc:creator>Hiro</dc:creator><author>Hiro</author><pubDate>Mon, 16 Jun 2008 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/youngsun/articles/208456.html</guid><wfw:comment>http://www.blogjava.net/youngsun/comments/208456.html</wfw:comment><comments>http://www.blogjava.net/youngsun/articles/208456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngsun/comments/commentRss/208456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngsun/services/trackbacks/208456.html</trackback:ping><description><![CDATA[JNDI(Java&nbsp;Naming&nbsp;and&nbsp;Directory&nbsp;Interface)是一个应用程序设计的API，为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口，类似JDBC都是构建在抽象层上。 <br />
JNDI可访问的现有的目录及服务有： <br />
DNS、XNam&nbsp;、Novell目录服务、LDAP(Lightweight&nbsp;Directory&nbsp;Access&nbsp;Protocol&nbsp;轻型目录访问协议)、&nbsp;CORBA对象服务、文件系统、Windows&nbsp;XP/2000/NT/Me/9x的注册表、RMI、DSML&nbsp;v1&amp;v2、NIS。 <br />
JNDI优点： <br />
包含了大量的命名和目录服务，使用通用接口来访问不同种类的服务； <br />
可以同时连接到多个命名或目录服务上； <br />
建立起逻辑关联，允许把名称同Java对象或资源关联起来，而不必指导对象或资源的物理ID。 <br />
JNDI程序包： <br />
javax.naming：命名操作； <br />
javax.naming.directory：目录操作； <br />
javax.naming.event：在命名目录服务器中请求事件通知； <br />
javax.naming.ldap：提供LDAP支持； <br />
javax.naming.spi：允许动态插入不同实现。 <br />
利用JNDI的命名与服务功能来满足企业级APIs对命名与服务的访问，诸如EJBs、JMS、JDBC&nbsp;2.0以及IIOP上的RMI通过JNDI来使用CORBA的命名服务。 <br />
JNDI与JDBC： <br />
JNDI提供了一种统一的方式，可以用在网络上查找和访问服务。通过指定一个资源名称，该名称对应于数据库或命名服务中的一个纪录，同时返回数据库连接建立所必须的信息。 <br />
代码示例： <br />
try{ <br />
Context&nbsp;cntxt&nbsp;=&nbsp;new&nbsp;InitialContext(); <br />
DataSource&nbsp;ds&nbsp;=&nbsp;(DataSource)&nbsp;cntxt.lookup("jdbc/dpt"); <br />
} <br />
catch(NamingException&nbsp;ne){ <br />
... <br />
} <br />
JNDI与JMS： <br />
消息通信是软件组件或应用程序用来通信的一种方法。JMS就是一种允许应用程序创建、发送、接收、和读取消息的JAVA技术。 <br />
代码示例： <br />
try{ <br />
Properties&nbsp;env&nbsp;=&nbsp;new&nbsp;Properties(); <br />
InitialContext&nbsp;inictxt&nbsp;=&nbsp;new&nbsp;InitialContext(env); <br />
TopicConnectionFactory&nbsp;connFactory&nbsp;=&nbsp;(TopicConnectionFactory)&nbsp;inictxt.lookup("TTopicConnectionFactory"); <br />
... <br />
} <br />
catch(NamingException&nbsp;ne){ <br />
... <br />
} <br />
访问特定目录：举个例子，人是个对象，他有好几个属性，诸如这个人的姓名、电话号码、电子邮件地址、邮政编码等属性。通过getAttributes()方法 <br />
Attribute&nbsp;attr&nbsp;= <br />
&nbsp;&nbsp;&nbsp;&nbsp;directory.getAttributes(personName).get("email"); <br />
String&nbsp;email&nbsp;=&nbsp;(String)attr.get(); <br />
通过使用JNDI让客户使用对象的名称或属性来查找对象： <br />
foxes&nbsp;=&nbsp;directory.search("o=Wiz,c=US",&nbsp;"sn=Fox",&nbsp;controls); <br />
通过使用JNDI来查找诸如打印机、数据库这样的对象，查找打印机的例子： <br />
Printer&nbsp;printer&nbsp;=&nbsp;(Printer)namespace.lookup(printerName); <br />
printer.print(document); <br />
浏览命名空间： <br />
NamingEnumeration&nbsp;list&nbsp;=&nbsp;namespace.list("o=Widget,&nbsp;c=US"); <br />
while&nbsp;(list.hasMore())&nbsp;{ <br />
NameClassPair&nbsp;entry&nbsp;=&nbsp;(NameClassPair)list.next(); <br />
display(entry.getName(),&nbsp;entry.getClassName()); <br />
} <br />
</cc>
<table width="72%" bgcolor="#ffffff" border="0">
    <tbody>
        <tr>
            <td></td>
            <td align="left" width="97%">
            <table class="wr" cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td class="gray14"><cc>常用的JNDI操作： <br />
                        常用的JNDI操作： <br />
                        void&nbsp;bind(String&nbsp;sName,Object&nbsp;object);――绑定：把名称同对象关联的过程 <br />
                        void&nbsp;rebind(String&nbsp;sName,Object&nbsp;object);――重新绑定：用来把对象同一个已经存在的名称重新绑定 <br />
                        void&nbsp;unbind(String&nbsp;sName);――释放：用来把对象从目录中释放出来 <br />
                        void&nbsp;lookup(String&nbsp;sName,Object&nbsp;object);――查找：返回目录总的一个对象 <br />
                        void&nbsp;rename(String&nbsp;sOldName,String&nbsp;sNewName);――重命名：用来修改对象名称绑定的名称 <br />
                        NamingEnumeration&nbsp;listBinding(String&nbsp;sName);――清单：返回绑定在特定上下文中对象的清单列表 <br />
                        NamingEnumeration&nbsp;list(String&nbsp;sName); <br />
                        代码示例：重新得到了名称、类名和绑定对象。 <br />
                        NamingEnumeration&nbsp;namEnumList&nbsp;=&nbsp;ctxt.listBinding("cntxtName"); <br />
                        ... <br />
                        while&nbsp;(&nbsp;namEnumList.hasMore()&nbsp;)&nbsp;{ <br />
                        Binding&nbsp;bnd&nbsp;=&nbsp;(Binding)&nbsp;namEnumList.next(); <br />
                        String&nbsp;sObjName&nbsp;=&nbsp;bnd.getName(); <br />
                        String&nbsp;sClassName&nbsp;=&nbsp;bnd.getClassName(); <br />
                        SomeObject&nbsp;objLocal&nbsp;=&nbsp;(SomeObject)&nbsp;bnd.getObject(); <br />
                        }</cc> </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br />
JNDI主要提供应用程序所需要资源上命名与目录服务.在Java&nbsp;EE环境中,JNDI扮演了一个很重要的角色,它提供了一个接口让用户在不知道资源所在位置的情形下,取得该资源服务.&nbsp;就好比网络磁盘驱动器的功能一样。如果有人事先将另一台机器上的磁盘驱动器接到用户的机器上,用户在使用的时候根本就分辨不出现在的驱动器是存在本端,还是在另一端的机器上,用户只需取得资源来用,根本就不知道资源在什么地方。&nbsp;JNDI这个接口基本上是LDAP,LDAP全名为Lightweight&nbsp;Directory&nbsp;Access&nbsp;Protocol.</cc> <br />
<br />
JNDI是Java平台的一个标准扩展，提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样，JDNI是provider-based的技术，暴露了一个API和一个服务供应接口（SPI）。这意味着任何基于名字的技术都能通过JNDI而提供服务，只要JNDI支持这项技术。JNDI目前所支持的技术包括LDAP、CORBA&nbsp;Common&nbsp;Object&nbsp;Service（COS）名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术，包括EJB都依靠JNDI来组织和定位实体。&nbsp; <br />
JDNI通过绑定的概念将对象和名称联系起来。在一个文件系统中，文件名被绑定给文件。在DNS中，一个IP地址绑定一个URL。在目录服务中，一个对象名被绑定给一个对象实体。&nbsp; <br />
JNDI中的一组绑定作为上下文来引用。每个上下文暴露的一组操作是一致的。例如，每个上下文提供了一个查找操作，返回指定名字的相应对象。每个上下文都提供了绑定和撤除绑定名字到某个对象的操作。JNDI使用通用的方式来暴露命名空间，即使用分层上下文以及使用相同命名语法的子上下文。&nbsp; <br />
jndi的用途：&nbsp; <br />
1。你可以用jndi来得到object类的属性&nbsp; <br />
如：Attribute&nbsp;attr&nbsp;=directory.getAttributes(personName).get("email");&nbsp; <br />
String&nbsp;email&nbsp;=&nbsp;(String)attr.get();&nbsp; <br />
2。你可以用jndi来搜索对象&nbsp; <br />
如：foxes&nbsp;=&nbsp;directory.search("o=Wiz,c=US",&nbsp;"sn=Fox",&nbsp;controls);&nbsp; <br />
查找谁的名字叫Fox在wiz部门的员工？&nbsp; <br />
3。你可以用jndi通过naming/directory服务查询像printers和databases的对象&nbsp; <br />
如：查询&nbsp;Printer&nbsp; <br />
Printer&nbsp;printer&nbsp;=&nbsp;(Printer)namespace.lookup(printerName);&nbsp; <br />
printer.print(document);&nbsp; <br />
4。你可以用jndi列表出命名空间的特殊级别的内容&nbsp; <br />
如：&nbsp; <br />
NamingEnumeration&nbsp;list&nbsp;=&nbsp;namespace.list("o=Widget,&nbsp;c=US");&nbsp; <br />
while&nbsp;(list.hasMore())&nbsp;{&nbsp; <br />
NameClassPair&nbsp;entry&nbsp;=&nbsp;(NameClassPair)list.next();&nbsp; <br />
display(entry.getName(),&nbsp;entry.getClassName());</cc> <br />
<br />
<table width="72%" bgcolor="#ffffff" border="0">
    <tbody>
        <tr>
            <td align="left" width="97%">
            <table class="wr" cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td class="gray14">和多数java服务一样，SUN对JNDI也只提供接口，使用JNDI只需要用到JNDI接口而不必关心具体实现： <br />
                        <br />
                        private&nbsp;static&nbsp;Object&nbsp;jndiLookup()&nbsp;throws&nbsp;Exception&nbsp;{ <br />
                        &nbsp;InitialContext&nbsp;ctx&nbsp;=&nbsp;new&nbsp;InitialContext(); <br />
                        &nbsp;return&nbsp;ctx.lookup("java:comp/env/systemStartTime"); <br />
                        } <br />
                        <br />
                        上述代码在J2EE服务器环境下工作得很好，但是在main()中就会报一个NoInitialContextException，许多文章会说你创建InitialContext的时候还要传一个Hashtable或者Properties，像这样： <br />
                        <br />
                        Hashtable&nbsp;env&nbsp;=&nbsp;new&nbsp;Hashtable(); <br />
                        env.put(Context.INITIAL_CONTEXT_FACTORY,&nbsp;"weblogic.jndi.WLInitialContextFactory"); <br />
                        env.put(Context.PROVIDER_URL,"t3://localhost:7001"); <br />
                        InitialContext&nbsp;ctx&nbsp;=&nbsp;new&nbsp;InitialContext(env); <br />
                        <br />
                        这个在WebLogic环境下是对的，但是换到JBoss呢？再用JBoss的例子？ <br />
                        <br />
                        其实之所以有NoInitialContextException是因为无法从System.properties中获得必要的JNDI参数，在服务器环境下，服务器启动时就把这些参数放到System.properties中了，于是直接new&nbsp;InitialContext()就搞定了，不要搞env那么麻烦，搞了env你的代码还无法移植，弄不好管理员设置服务器用的不是标准端口还照样抛异常。 <br />
                        <br />
                        但是在单机环境下，可没有JNDI服务在运行，那就手动启动一个JNDI服务。我在JDK&nbsp;5的rt.jar中一共找到了4种SUN自带的JNDI实现： <br />
                        <br />
                        LDAP，CORBA，RMI，DNS。 <br />
                        <br />
                        这4种JNDI要正常运行还需要底层的相应服务。一般我们没有LDAP或CORBA服务器，也就无法启动这两种JNDI服务，DNS用于查域名的，以后再研究，唯一可以在main()中启动的就是基于RMI的JNDI服务。 <br />
                        <br />
                        现在我们就在main()中启动基于RMI的JNDI服务并且绑一个Date对象到JNDI上： <br />
                        <br />
                        LocateRegistry.createRegistry(1099); <br />
                        System.setProperty(Context.INITIAL_CONTEXT_FACTORY,&nbsp;"com.sun.jndi.rmi.registry.RegistryContextFactory"); <br />
                        System.setProperty(Context.PROVIDER_URL,&nbsp;"rmi://localhost:1099"); <br />
                        InitialContext&nbsp;ctx&nbsp;=&nbsp;new&nbsp;InitialContext(); <br />
                        class&nbsp;RemoteDate&nbsp;extends&nbsp;Date&nbsp;implements&nbsp;Remote&nbsp;{}; <br />
                        ctx.bind("java:comp/env/systemStartTime",&nbsp;new&nbsp;RemoteDate()); <br />
                        ctx.close(); <br />
                        <br />
                        注意，我直接把JNDI的相关参数放入了System.properties中，这样，后面的代码如果要查JNDI，直接new&nbsp;InitialContext()就可以了，否则，你又得写Hashtable&nbsp;env&nbsp;=&nbsp;... <br />
                        <br />
                        在RMI中绑JNDI的限制是，绑定的对象必须是Remote类型，所以就自己扩展一个。 <br />
                        <br />
                        其实JNDI还有两个Context.SECURITY_PRINCIPAL和Context.SECURITY_CREDENTIAL，如果访问JNDI需要用户名和口令，这两个也要提供，不过一般用不上。 <br />
                        <br />
                        在后面的代码中查询就简单了： <br />
                        <br />
                        InitialContext&nbsp;ctx&nbsp;=&nbsp;new&nbsp;InitialContext(); <br />
                        Date&nbsp;startTime&nbsp;=&nbsp;(Date)&nbsp;ctx.lookup("java:comp/env/systemStartTime"); <br />
                        <br />
                        在SUN的JNDI&nbsp;tutorial中的例子用的com.sun.jndi.fscontext.RefFSContextFactory类，但是我死活在JDK&nbsp;5中没有找到这个类，也就是NoClassDefFoundError，他也不说用的哪个扩展包，我也懒得找了。</cc> </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr>
            <td height="17"></td>
        </tr>
    </tbody>
</table>
<br />
JNDI是J2EE中一个很重要的标准，通常我们是在J2EE编程中用到，Tomcat中提供了在JSP和Servelt中直接使用JNDI的方法，主要是通过dbcp连接池，下面谈一下我在Tomcat5.5中配置和使用JNDI的方法。本文的对象是对j2ee编程有所了解的读者，或者已经看过了我的Blog：tomcat的基本配置说明&nbsp; <br />
&nbsp;一、先在自己应用程序WEB-INF目录下的web.xml添加以下语句： <br />
&nbsp;&lt;resource-ref&gt; <br />
&nbsp;&lt;descrtiption&gt;引用资源说明&lt;/descrtiption&gt; <br />
&nbsp;&lt;res-ref-name&gt;引用资源的JNDI名&lt;/res-ref-name&gt; <br />
&nbsp;&lt;res-type&gt;引用资源的类名&lt;/res-type&gt; <br />
&nbsp;&lt;res-auth&gt;管理者（Container）&lt;/res-auth&gt;&lt;!--Container－容器管理&nbsp;Application－Web应用管理--&gt; <br />
&lt;/resource-ref&gt; <br />
&nbsp;然后在tomcat目录/conf/server.xml文件里相应的&lt;Context&gt;元素，看我的Blog：tomcat的基本配置说明&nbsp; <br />
添加如下子元素： <br />
&lt;Resource&nbsp;name="引用资源的JNDI名"&nbsp;auth="Container"&nbsp;type="javax.sql.DataSource" <br />
&nbsp;driverClassName="com.pointbase.jdbc.jdbcUniversalDriver（自己的jdbc驱动）" <br />
&nbsp;url="jdbc:pointbase:server://localhost/acme（数据库连接url）" <br />
&nbsp;username="root（用户名）"&nbsp;password="root（密码）"&nbsp;maxActive="20（连接池dbcp的相关配置）"&nbsp;maxIdle="10"&nbsp;maxWait="10000"/&gt; <br />
&nbsp;注意，要把你的驱动拷到common/lib下，我用的是pointbase因此我拷的是pbclient44.jar到了common/lib下（对pointbase感兴趣的读者可以看我的另一篇文章pointbase数据库学习，里面也提到了我为什么是用pointbase数据库作为讲解）。 <br />
二、例子：以下是我的假设的项目ACMEWeb： <br />
&nbsp;在相应程序的web.xml里添加 <br />
&lt;web-app&nbsp;....&gt;&nbsp; <br />
&nbsp;..... <br />
&nbsp;&lt;resource-ref&gt; <br />
&nbsp;&lt;res-ref-name&gt;jdbc/AcmeDB&lt;/res-ref-name&gt; <br />
&nbsp;&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt; <br />
&nbsp;&lt;res-auth&gt;Container&lt;/res-auth&gt; <br />
&nbsp;&lt;/resource-ref&gt; <br />
&lt;/web-app&gt; <br />
&nbsp;然后再server.xml里修改： <br />
&nbsp;&lt;Context&nbsp;path="/ACMEWeb"&nbsp;reloadable="true"&nbsp;docBase="E:\eclipseproject\ACMEWeb"&nbsp;workDir="E:\eclipseproject\ACMEWeb\work"&gt; <br />
&nbsp;&lt;Resource&nbsp;name="jdbc/AcmeDB"&nbsp;auth="Container"&nbsp;type="javax.sql.DataSource"&nbsp;driverClassName="com.pointbase.jdbc.jdbcUniversalDriver"&nbsp;url="jdbc:pointbase:server://localhost/acme"&nbsp;username="root"&nbsp;password="root"&nbsp;maxActive="20"&nbsp;maxIdle="10"&nbsp;maxWait="10000"/&gt; <br />
&lt;/Context&gt; <br />
&nbsp;建议你把上面的内容编写成为一个xml文件，拷到conf/Catalina/&lt;主机名&gt;/文件夹下，若有不懂的地方可以参考我的Blog：tomcat的基本配置说明&nbsp;和tomcat的文档。</cc> <br />
<img src ="http://www.blogjava.net/youngsun/aggbug/208456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngsun/" target="_blank">Hiro</a> 2008-06-16 23:24 <a href="http://www.blogjava.net/youngsun/articles/208456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat中的jndi配置</title><link>http://www.blogjava.net/youngsun/articles/208454.html</link><dc:creator>Hiro</dc:creator><author>Hiro</author><pubDate>Mon, 16 Jun 2008 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/youngsun/articles/208454.html</guid><wfw:comment>http://www.blogjava.net/youngsun/comments/208454.html</wfw:comment><comments>http://www.blogjava.net/youngsun/articles/208454.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/youngsun/comments/commentRss/208454.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/youngsun/services/trackbacks/208454.html</trackback:ping><description><![CDATA[如果是tomcat5以下，则修改conf/server.xml文件，tomcat5及以上则修改／conf/Catalina/localhost目录中的一个xml文件。在&lt;/Host&gt;行之前插入如下的一段标签：&nbsp; <br />
<br />
(以oralce为例，假设你应用的上下文根是／test,jndi是jdbc/test)&nbsp; <br />
<br />
&lt;Context&nbsp;path="/test"&nbsp;docBase="E:\test"&nbsp;&gt;&nbsp; <br />
<br />
&lt;Resource&nbsp;name="jdbc/test"&nbsp;auth="Container"&nbsp;type="javax.sql.DataSource"/&gt;&nbsp; <br />
&lt;ResourceParams&nbsp;name="jdbc/test"&gt;&nbsp; <br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;username&lt;/name&gt;&nbsp; <br />
&lt;value&gt;system&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; <br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;password&lt;/name&gt;&nbsp; <br />
&lt;value&gt;manager&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; <br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;driverClassName&lt;/name&gt;&nbsp; <br />
&lt;value&gt;oracle.jdbc.driver.OracleDriver&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; <br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;url&lt;/name&gt;&nbsp; <br />
&lt;value&gt;jdbc:oracle:thin:@192.168.0.27:1521:titan&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; <br />
&lt;/ResourceParams&gt;&nbsp; <br />
&lt;/Context&gt;</cc> <br />
<br />
在Tomcat&nbsp;5.5\conf\Catalina\localhost\xxxxx.xml(xxxxx.xml为你自己的web的配置xml文件)&nbsp;中添加resource <br />
<br />
&nbsp;&lt;Resource&nbsp;name="MYSQL" <br />
&nbsp;type="javax.sql.DataSource" <br />
&nbsp;driverClassName="com.mysql.jdbc.Driver" <br />
&nbsp;password="********" <br />
&nbsp;maxIdle="2" <br />
&nbsp;maxWait="5000" <br />
&nbsp;username="root" <br />
&nbsp;url="jdbc:mysql://localhost:3306/jnestore" <br />
&nbsp;maxActive="10"/&gt; <br />
<br />
以上是tomcat&nbsp;5.5版本的配置,5.5版本只有这样陪才有效果,以前的版本可以按照paramter的方法添加; <br />
<br />
Resource&nbsp;一定要包含在&lt;Context&nbsp;......&gt;&nbsp;&lt;/Context&gt;&nbsp;之间 <br />
<br />
或者在web应用程序的context.xml中设置数据源链接，如下：<br />
&nbsp;&nbsp;在&lt;Context&gt;&lt;/Context&gt;节点中加入，<br />
&nbsp;&nbsp;&lt;ResourceLink<br />
&nbsp;&nbsp;&nbsp;name="jdbc/DBPool"&nbsp;<br />
&nbsp;&nbsp;&nbsp;type="javax.sql.DataSource"&nbsp;<br />
&nbsp;&nbsp;&nbsp;global="jdbc/DBPool"/&gt;<br />
&nbsp;&nbsp;&nbsp;属性说明：name，同第2步和第3步的属性name值，和子节点res-ref-name值；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type，同样取&#8221;javax.sql.DataSource&#8221;；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;global，同name值。<br />
<br />
在你的web的路近下,WEB-INF中找到web.xml,添加资源映射&nbsp; <br />
<br />
&nbsp;&lt;resource-ref&gt; <br />
&nbsp;&lt;description&gt;connection&lt;/description&gt; <br />
&nbsp;&lt;res-ref-name&gt;MYSQL&lt;/res-ref-name&gt; <br />
&nbsp;&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt; <br />
&nbsp;&lt;res-auth&gt;Container&lt;/res-auth&gt; <br />
&nbsp;&lt;/resource-ref&gt; <br />
<br />
把mysql的jdbc驱动.jar包放到tomcat的common/lib下去,也可以放到WEB-INF/lib下, <br />
<br />
重新启动tomcat. <br />
<br />
就可以用Context&nbsp;ctx&nbsp;=&nbsp;new&nbsp;InitialContext(); <br />
<br />
DataSource&nbsp;ds&nbsp;=&nbsp;(DataSource)&nbsp;ctx.lookup("java:comp/env/MYSQL"); <br />
<br />
Connection&nbsp;con&nbsp;=&nbsp;ds.getConnection();&nbsp;来连接数据库连接池</cc> 
<img src ="http://www.blogjava.net/youngsun/aggbug/208454.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/youngsun/" target="_blank">Hiro</a> 2008-06-16 23:15 <a href="http://www.blogjava.net/youngsun/articles/208454.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>