﻿<?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-edog</title><link>http://www.blogjava.net/edog/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 12:20:43 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 12:20:43 GMT</pubDate><ttl>60</ttl><item><title>使用 JDBC 驱动程序连接SQL Server</title><link>http://www.blogjava.net/edog/archive/2008/06/25/210423.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Tue, 24 Jun 2008 16:05:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/25/210423.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210423.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/25/210423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210423.html</trackback:ping><description><![CDATA[<br />
编译环境：<br />
NetBeans IDE 6.1; JDK 6 (JDK 1.6.0_06)<br />
<br />
1、安装Microsoft SQL Server 2000，据说要企业版才行。<br />
2、下载Microsoft SQL Server 2000 Service Pack 4，并安装更新。安装完毕版本显示如下：<br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8e2dfc8d-c20e-4446-99a9-b7f0213f8bc5&amp;DisplayLang=zh-cn">下载：http://www.microsoft.com/downloads/details.aspx?FamilyID=8e2dfc8d-c20e-4446-99a9-b7f0213f8bc5&amp;DisplayLang=zh-cn</a><br />
<div align="center" twffan="done"><img alt="" src="http://www.blogjava.net/images/blogjava_net/edog/32535/o_sql.jpg" border="0" twffan="done" /></div>
<br />
<br />
3、下载Microsoft SQL Server 2005 JDBC 驱动程序，并解压，得到一个sqljdbc.jar文件。<br />
<a href="/Files/edog/sqljdbc.rar">本地下载</a>&nbsp;(下载后把.rar改为.jar)<br />
<br />
4、新建一个JAVA项目，并把sqljdbc.jar加到项目库中：<br />
选中项目--&gt;右键--&gt;属性--&gt;类别--&gt;库--&gt;运行--&gt;添加JAR/文件夹<br />
<div align="center" twffan="done"><img alt="" src="http://www.blogjava.net/images/blogjava_net/edog/32535/o_lib.jpg" border="0" twffan="done" /></div>
<br />
或者直接把sqljdbc.jar复制到类似如下的目录中：D:\Program Files\Java\jdk1.6.0_06\jre\lib\ext<br />
<br />
5、编写程序，如下，查询Northwind中Employees表中的员工姓名：<br />
&nbsp;
<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" twffan="done"><span style="color: #0000ff" twffan="done">package</span><span style="color: #000000" twffan="done">&nbsp;db4mssql;<br />
</span><span style="color: #0000ff" twffan="done">import</span><span style="color: #000000" twffan="done">&nbsp;java.sql.</span><span style="color: #000000" twffan="done">*</span><span style="color: #000000" twffan="done">;<br />
</span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">class</span><span style="color: #000000" twffan="done">&nbsp;Main&nbsp;<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">static</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">void</span><span style="color: #000000" twffan="done">&nbsp;main(String&nbsp;args[])<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;con;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;sql;&nbsp;</span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">声明Statement对象</span><span style="color: #008000" twffan="done"><br />
</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">try</span><span style="color: #000000" twffan="done"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</span><span style="color: #008000" twffan="done"><br />
</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">com.microsoft.sqlserver.jdbc.SQLServerDriver</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">catch</span><span style="color: #000000" twffan="done">(ClassNotFoundException&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000" twffan="done">""</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">return</span><span style="color: #000000" twffan="done">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">try</span><span style="color: #000000" twffan="done"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">jdbc:sqlserver://localhost;database=Northwind;user=sa;password=sa</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;DriverManager.getConnection(url);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">con.createStatement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">sql.executeQuery(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">Select&nbsp;FirstName,&nbsp;LastName&nbsp;FROM&nbsp;Employees</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">int</span><span style="color: #000000" twffan="done">&nbsp;i</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">1</span><span style="color: #000000" twffan="done">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">while</span><span style="color: #000000" twffan="done">(rs.next())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(i</span><span style="color: #000000" twffan="done">++</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">:&nbsp;</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">&nbsp;rs.getString(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">FirstName</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">)&nbsp;</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">&nbsp;rs.getString(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">LastName</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">));&nbsp;</span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">输出信息</span><span style="color: #008000" twffan="done"><br />
</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">catch</span><span style="color: #000000" twffan="done">(SQLException&nbsp;el)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000" twffan="done">""</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">el);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
程序运行结果如下：<br />
1: Nancy Davolio<br />
2: Andrew Fuller<br />
3: Janet Leverling<br />
4: Margaret Peacock<br />
5: Steven Buchanan<br />
6: Michael Suyama<br />
7: Robert King<br />
8: Laura Callahan<br />
9: Anne Dodsworth 
<img src ="http://www.blogjava.net/edog/aggbug/210423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-25 00:05 <a href="http://www.blogjava.net/edog/archive/2008/06/25/210423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是Java EE 5</title><link>http://www.blogjava.net/edog/archive/2008/06/24/210243.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Tue, 24 Jun 2008 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/24/210243.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210243.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/24/210243.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210243.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-size: 9pt; font-family: 宋体" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近，SUN的伙伴们(the folks at SUN)将J2EE 1.5改名为java EE 5，当然以前J2EE版本还是称为J2EE，之所以改名，目的还是让大家清楚J2EE只是Java企业应用，用我的话来说，J2EE就是Java在数据库服务器端的应用（见<a href="http://tech.163.com/05/1017/16/209E0Q870009159F.html" target="_blank"><span style="color: #0066cc; text-decoration: none; text-underline: none" twffan="done">初学者如何开发出一个高质量的J2EE<span style="color: #0066cc; text-decoration: none; text-underline: none" twffan="done">系统</span></a></span>）。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">看来，现在大多数人倾向于更加突出Java了，J2EE容易让初学者误解是独立于一套Java的技术方案。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">从更深层次来看，Java诞生十年来，很多近十年前的业务组件至今还可以使用，软件应用不再由于语言的更迭革命带来毁灭的打击了。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">但是，随着WEB和EJB容器概念诞生，使得软件应用业开始担心SUN的伙伴们是否还在Java平台上不断推出翻新的标准框架，致使软件应用业的业务核心组件架构无所适从，从一直以来是否需要EJB的讨论声中说明了这种彷徨。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">笔者曾经在2004年底中国软件技术大会Ioc微容器(也就是Jdon框架的实现原理)演讲中指出：我们需要一个跨J2SE/WEB/EJB的微容器，保护我们的业务核心组件（中间件），以延续它的生命力，而不是依赖J2SE/J2EE版本，如下图：<br />
<div align="center" twffan="done"><img height="239" alt="" src="http://www.blogjava.net/images/blogjava_net/edog/32535/o_1.JPG" width="300" border="0" twffan="done" /></div>
&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">此次J2EE改名为Java EE，实际也反映出业界这种共同心声。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">让我们看看Java EE 5有哪些新的功能或规定，我们可以从SUN网站下载Java EE 5规范。其架构图如下：<br />
<div align="center" twffan="done"><img height="479" alt="" src="http://www.blogjava.net/images/blogjava_net/edog/32535/o_2.JPG" width="546" border="0" twffan="done" /></div>
<br />
</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">图中灰色加黑部分是Java EE 5新的功能，我们看到，在WEB层主要加入了JSF这个新的表现层框架，和我们日常开发关系密切的是，引入了新的Java Persistence标准，这个标准正在由EJB 3.0专家组制定。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">值得指出的是，这个Java持久化标准也可以嵌入在WEB层调用，所以，它肯定不会从属于EJB标准，这样，当前所有的Java持久层标准如：JDBC/JDO/Hibernate/Entity Bean将可能统一，减少用户的架构选择 痛苦。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">从架构图可以看出，无论Web结构或EJB结构，提供实现的功能相差不多，这样，我们的业务核心组件就可以根据需要部署在Web或EJB中运行，而不依赖具体的Java EE容器了。前面一章图的目标在Java EE 5中可以实现了。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">当然，Java EE 5重要改变还是：Java EE不再象以前那样只注重大型商业系统的开发，而是更关注小到中型系统的开发，简化这部分系统开发步骤。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">落实这一简化行动的最大特征是在Java 5.0(Java 1.5)中加入Annotations，通过Annotations引入，降低Java EE开发时，既要写code，又要写XML配置文件之苦，来回照顾，疲于奔命，Annotations既是得益于C++语言，也是从开源项目xDoclet实践中获得经验。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">但是Annotations是一把双刃剑，初学者用得不好，将会使得原本在XML中的Hard code（硬编码） 写进入代码Annotations，破坏代码的简洁和灵活性，Annotations讨论按这里。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">当然，Annotations的引入不只是解决XML配置，从大的概念说，是解决一个资源注射问题(XML属于其中一个资源)，在原理J2EE中，容器管理的资源都是由JNDI向应用程序提供的，现在通过Annotations可以方便实现注射。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">资源注射（Resource injection）设计概念其实是来自Ioc模式(Dependency Injection )，笔者设计开发的Jdon框架其实已经将Annotations这一宗旨的目的实现，在Jdon框架应用演示源码<strong>SimpleJdonFrameworkTest</strong>中，在jdonframework.xml中有一段如下配置：</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">&lt;pojoService class="com.jdon.framework.test.dao.JdbcDAO" name="jdbcDAO"&gt;</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">&lt;constructor value="java:/TestDS"/&gt;</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">&lt;/pojoService&gt; </span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">这段配置是将数据库的JNDI名java:/TestDS注射到JdbcDAO中。Jdon Framework下一个版本将是基于Java 5.0，这行配置 将可通过 Annotations写在jdbcDAO代码中，方便程序员开发。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">从这里，大家也可以知道EJB 3.0和EJB 2.0的区别了，有的人疑惑，是学习EJB 3.0还是学习EJB 2.0，其实EJB 3.0并没有在原理机制上对EJB有多大改动，只是做了编程方面的简化，另外EJB CMP参考了Hibernate新特点，EJB 3.0最大简化变动是CMP编程方法上。所以，无论学习EJb 3.0/2.0，EJB原理和运行机制都是一样，这部分才是学习EJB最大的困难处，而不是因为到了EJB 3.0，理解EJB就会容易。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">初学者可从Eclipse+Xdoclet开发EJB 2.0开始学习， EJB 3.0 = EJB 2.0 + xDoclet，这里有一篇Eclipse开发EJB教程，使用JBossIDE非常简单，无需Lomboz等插件。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">Security</span><span style="font-size: 9pt; font-family: 宋体" twffan="done">安全是Java EE的一个重要特点，也就是基于容器的安全访问，无需自己手工编码，具体实现可参考Jdon框架应用演示源码JdonNews。这虽然是基于J2EE 1.3编写，但是和Java EE 5区别不是很大。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">事务管理Transaction Management也是Java EE 5的一个重要部分，该标准文档从几个方面阐述了事务管理的要点，标准中规定了在WEB层中使用事务和线程的处理关系，标准中规定：Web服务器如Tomcat无需在Web层提供事务支持，因为Web组件根本不支持事务繁衍/传递。</span></p>
<p style="margin: 7.5pt 0cm; text-indent: 24pt; line-height: 12pt; text-align: left" align="left"><span style="font-size: 9pt; font-family: 宋体" twffan="done">因为目前一些架构如Struts+Spring+Hibernate/Struts+Hibernate是标准中的Web结构，因此Java EE 5在J2EE 4.2.2规定了 Web组件事务的生命周期，如果Web组件直接调用JTA，事务就不可以跨一个客户端的多个请求，事务只能在一个请求(Servlet/Jsp)中完成，这个标准规定了我们在Web架构中（如上述架构）无法使用长事务(如工作流/状态图中跨页面请求事务)，针对一个客户端跨请求的事务目前只有唯一解决方案：只有使用EJB的有态Session。以上是Java EE 5主要部分，Java EE包含更多其他技术部分如Jdbc JMS JCA JNDI 等等，需要用户在实践中摸索。</span></p>
<img src ="http://www.blogjava.net/edog/aggbug/210243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-24 10:20 <a href="http://www.blogjava.net/edog/archive/2008/06/24/210243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NetBeans 多语言界面</title><link>http://www.blogjava.net/edog/archive/2008/06/24/210239.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Tue, 24 Jun 2008 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/24/210239.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210239.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/24/210239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210239.html</trackback:ping><description><![CDATA[<p><font style="background-color: #f4f4f4">安装好 NetBeans 多国语言版本之后，表面上看起来似乎只有简体中文，但其实只要稍加改动快捷方式的启动参数，不用额外安装任何文件，就可以轻松切换到英文、日文等界面。</font></p>
<p><font style="background-color: #f4f4f4">英文：<br />
"C:\Program Files\NetBeans 6.1\bin\netbeans.exe" --locale en:US</font></p>
<p><font style="background-color: #f4f4f4">日文：<br />
"C:\Program Files\NetBeans 6.1\bin\netbeans.exe" --locale ja:JA</font></p>
<img src ="http://www.blogjava.net/edog/aggbug/210239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-24 10:15 <a href="http://www.blogjava.net/edog/archive/2008/06/24/210239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用ODBC连接SQL Server</title><link>http://www.blogjava.net/edog/archive/2008/06/23/210175.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Mon, 23 Jun 2008 14:36:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/23/210175.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210175.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/23/210175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210175.html</trackback:ping><description><![CDATA[<br />
本程序需要建立一个ODBC，名为&#8220;Northwind&#8221;的系统DSN，连接到SQL Server的Northwind数据库，<br />
并查询Employees表中所有员工的姓名，程序如下：<br />
<br />
<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" twffan="done"><span style="color: #0000ff" twffan="done">package</span><span style="color: #000000" twffan="done">&nbsp;db2mssql;<br />
</span><span style="color: #0000ff" twffan="done">import</span><span style="color: #000000" twffan="done">&nbsp;java.sql.</span><span style="color: #000000" twffan="done">*</span><span style="color: #000000" twffan="done">;<br />
</span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">class</span><span style="color: #000000" twffan="done">&nbsp;Main&nbsp;<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">public</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">static</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">void</span><span style="color: #000000" twffan="done">&nbsp;main(String&nbsp;args[])<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;con;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;sql;&nbsp;</span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">声明Statement对象</span><span style="color: #008000" twffan="done"><br />
</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">try</span><span style="color: #000000" twffan="done"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">sun.jdbc.odbc.JdbcOdbcDriver</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">catch</span><span style="color: #000000" twffan="done">(ClassNotFoundException&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000" twffan="done">""</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">try</span><span style="color: #000000" twffan="done"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">DriverManager.getConnection(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">jdbc:odbc:Northwind</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">,</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">sa</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">,</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">sa</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">con.createStatement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">sql.executeQuery(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">Select&nbsp;FirstName,&nbsp;LastName&nbsp;FROM&nbsp;Employees</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">int</span><span style="color: #000000" twffan="done">&nbsp;i</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">0</span><span style="color: #000000" twffan="done">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">while</span><span style="color: #000000" twffan="done">(rs.next())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;FirstName</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">rs.getString(</span><span style="color: #000000" twffan="done">1</span><span style="color: #000000" twffan="done">);&nbsp;</span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">获得数据库第一列</span><span style="color: #008000" twffan="done"><br />
</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;LastName</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">rs.getString(</span><span style="color: #000000" twffan="done">2</span><span style="color: #000000" twffan="done">);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">Name</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">&nbsp;i</span><span style="color: #000000" twffan="done">++</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">:&nbsp;</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">&nbsp;FirstName&nbsp;</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #000000" twffan="done">+</span><span style="color: #000000" twffan="done">&nbsp;LastName);&nbsp;</span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">输出信息</span><span style="color: #008000" twffan="done"><br />
</span><span style="color: #000000" twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff" twffan="done">catch</span><span style="color: #000000" twffan="done">(SQLException&nbsp;el){}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
 <img src ="http://www.blogjava.net/edog/aggbug/210175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-23 22:36 <a href="http://www.blogjava.net/edog/archive/2008/06/23/210175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一个JDBC程序</title><link>http://www.blogjava.net/edog/archive/2008/06/23/210172.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Mon, 23 Jun 2008 14:26:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/23/210172.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210172.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/23/210172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210172.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210172.html</trackback:ping><description><![CDATA[&nbsp;
<p>转自：<a href="http://www.javaresearch.org/article/9581.htm">http://www.javaresearch.org/article/9581.htm</a> </p>
<p style="margin-bottom: 12pt"><span style="font-family: 宋体">本篇通过一个简单的数据库应用的例子告诉你如何编写你的第一个</span>JDBC<span style="font-family: 宋体">程序。</span></p>
<h3>一、JDBC简介</h3>
<p style="margin-bottom: 12pt"><br />
<span style="font-family: 宋体">　　相信在微软平台上开发过应用程序的朋友一定对</span>ODBC<span style="font-family: 宋体">不会陌生，</span>ODBC<span style="font-family: 宋体">是一种用</span>C<span style="font-family: 宋体">语言开发的</span>API<span style="font-family: 宋体">，通过它，你可以访问不同数据库平台上的数据</span>,<span style="font-family: 宋体">目前</span>ODBC<span style="font-family: 宋体">已经成为</span>Windows<span style="font-family: 宋体">环境下访问数据库的事实上的标准，也是一种基本方法。但是，由于</span>ODBC<span style="font-family: 宋体">的设计过于复杂，造成它很难对外扩展。</span>JDBC<span style="font-family: 宋体">是</span>SUN<span style="font-family: 宋体">开发的一种用来进行数据库访问的</span>API<span style="font-family: 宋体">，它借鉴了</span>ODBC<span style="font-family: 宋体">的的某些特点而没有它的复杂性，给数据库开发带来了极大的便利性。同时，</span>JDBC<span style="font-family: 宋体">还提供了对现存数据库</span>API<span style="font-family: 宋体">（比如</span>ODBC<span style="font-family: 宋体">）的调用，使得</span>Java<span style="font-family: 宋体">应用程序可以访问任何支持</span>ODBC<span style="font-family: 宋体">的数据库管理系统。</span></p>
<h3>二、开始</h3>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 宋体">下面这个简单的程序演示了如何在</span>java<span style="font-family: 宋体">中连接、打开和查询一个数据库。本例中以</span>mysql<span style="font-family: 宋体">为数据库平台。</span><br />
<br />
<br />
</p>
<ol type="1">
    <li style="tab-stops: list 36.0pt"><strong><span style="color: blue">import</span></strong>&nbsp;java.sql.*;&nbsp;;&nbsp; </li>
    <li style="tab-stops: list 36.0pt">&nbsp;</li>
    <li style="tab-stops: list 36.0pt"><strong><span style="color: blue">public</span></strong>&nbsp;<strong><span style="color: blue">class</strong>&nbsp;JDBCDemo{&nbsp; </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="color: blue">public</strong>&nbsp;<strong><span style="color: blue">static</span></strong>&nbsp;<strong><span style="color: blue">void</span></strong>&nbsp;main(<strong><a href="http://www.javaresearch.org/source/jdk142/java/lang/String.java.html" target="_blank">String</a></strong>[]&nbsp;args)&nbsp;{&nbsp; </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;<strong><a href="http://www.javaresearch.org/source/jdk142/java/lang/String.java.html" target="_blank">String</a></strong>&nbsp;driver=<span style="color: #ff33ff">"com.mysql.jdbc.Driver";&nbsp;&nbsp;&nbsp;&nbsp;<em><span style="color: #339900">//</span></em></span><em><span style="color: #339900; font-family: 宋体">驱动程序</span></em></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;<strong><a href="http://www.javaresearch.org/source/jdk142/java/lang/String.java.html" target="_blank">String</a></strong>&nbsp;url=<span style="color: #ff33ff">"localhost/jive";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em><span style="color: #339900">//</span></em></span><em><span style="color: #339900; font-family: 宋体">数据库服务器地址及数据库名</span></em></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;<strong><a href="http://www.javaresearch.org/source/jdk142/java/sql/Connection.java.html" target="_blank">Connection</a></strong>&nbsp;con=<strong><span style="color: blue">null</strong>; </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;<strong><a href="http://www.javaresearch.org/source/jdk142/java/sql/Statement.java.html" target="_blank">Statement</a></strong>&nbsp;st; </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;<strong><a href="http://www.javaresearch.org/source/jdk142/java/sql/ResultSet.java.html" target="_blank">ResultSet</a></strong>&nbsp;rs; </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="color: blue">try</strong>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em><span style="color: #339900">//(1)</span></em> </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><a href="http://www.javaresearch.org/source/jdk142/java/lang/Class.java.html" target="_blank">Class</a></strong>.forName(driver).newInstance();&nbsp; </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<strong><span style="color: blue">catch</strong>&nbsp;(<strong><a href="http://www.javaresearch.org/source/jdk142/java/lang/Exception.java.html" target="_blank">Exception</a></strong>&nbsp;ex)&nbsp;{&nbsp; </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em><span style="color: #339900">//&nbsp;</em></span><em><span style="color: #339900; font-family: 宋体">在这进行错误处理</span></em></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="color: blue">try</strong>{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em><span style="color: #339900">//(2)</span></em> </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con=<strong><a href="http://www.javaresearch.org/source/jdk142/java/sql/DriverManager.java.html" target="_blank">DriverManager</a></strong>.getConnection(url,<span style="color: #ff33ff">"test",<span style="color: #ff33ff">"test"</span>); </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st=con.createStatement(); </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs=st.executeQuery(<span style="color: #ff33ff">"Select&nbsp;*&nbsp;from&nbsp;jiveForums"); </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="color: blue">while</strong>(rs.next()){&nbsp;<em><span style="color: #339900">//</span></em></span><em><span style="color: #339900; font-family: 宋体">查询结果处理</span></em></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><a href="http://www.javaresearch.org/source/jdk142/java/lang/System.java.html" target="_blank">System</a></strong>.out.println(<span style="color: #ff33ff">"ID="+rs.getString(1)); </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><a href="http://www.javaresearch.org/source/jdk142/java/lang/System.java.html" target="_blank">System</a></strong>.out.println(<span style="color: #ff33ff">"Name="+rs.getString(2)); </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<strong><span style="color: blue">catch</strong>(<strong><a href="http://www.javaresearch.org/source/jdk142/java/lang/Exception.java.html" target="_blank">Exception</a></strong>&nbsp;e){ </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<strong><span style="color: blue">finally</strong>{ </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="color: blue">if</strong>(con==<strong><span style="color: blue">null</span></strong>)<strong><span style="color: blue">return</span></strong>; </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="color: blue">try</strong>{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em><span style="color: #339900">//(3)</span></em> </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.close(); </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<strong><span style="color: blue">catch</strong>(<strong><a href="http://www.javaresearch.org/source/jdk142/java/lang/Exception.java.html" target="_blank">Exception</a></strong>&nbsp;e){ </span></li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;} </li>
    <li style="tab-stops: list 36.0pt">&nbsp;&nbsp;&nbsp;&nbsp;} </li>
    <li style="tab-stops: list 36.0pt">} </li>
</ol>
<p style="margin-bottom: 12pt"><br />
<span style="font-family: 宋体">程序的第一句导入我们需要用到的</span>JDBC&nbsp;API<span style="font-family: 宋体">，为了方便，我以</span>*<span style="font-family: 宋体">来导入在</span>sql<span style="font-family: 宋体">中定义的所有包，你也可以只指定你用到的包，比如：</span>java.sql.Connection<span style="font-family: 宋体">等。</span><br />
<span style="font-family: 宋体">在主函数中定义的两个字符串分别是驱动程序名和数据库服务器地址及数据库名。我在这里使用的是</span>mysql<span style="font-family: 宋体">数据库，所以我用的是</span>mysql<span style="font-family: 宋体">驱动程序</span>,<span style="font-family: 宋体">不同的数据库用不同的驱动程序，如果你用的不是</span>mysql<span style="font-family: 宋体">，请替换此行。</span><br />
<span style="font-family: 宋体">服务器地址是你安装数据库的主机的</span>IP<span style="font-family: 宋体">，如果在本机，你也可以用</span>"localhost"<span style="font-family: 宋体">来连接。数据库名是你已经在数据库系统中建立过的，这里是</span>test.<span style="font-family: 宋体">接着在标识为</span>(1)<span style="font-family: 宋体">的</span>try<span style="font-family: 宋体">块中装载驱动程序。这一步是为驱动程序来装载自己，然后让驱动程序管理器来进行管理，在</span>(2)<span style="font-family: 宋体">的</span>try<span style="font-family: 宋体">块中，从驱动程序管理器中取得一个连接，第一个引数已经说过，第二个引数是数据库中的用户名，最后一个是口令。接着创建一个</span>Statement<span style="font-family: 宋体">对象来执行查询，查询结果将返回一个记录集，在这里就是</span>rs<span style="font-family: 宋体">。在接下来的</span>while<span style="font-family: 宋体">循环中来处理查询结果，在这只是简单的打印出来。</span><br />
<span style="font-family: 宋体">在</span>finally<span style="font-family: 宋体">块中，将执行连接的关闭，如果在前面没有正确得到一个连接，将直接返回。</span><br />
<span style="font-family: 宋体">好了，修改这个程序以适应你的平台，然后执行。怎么样连接数据库就这么简单。</span></p>
<h3>三、注意事项</h3>
<p><br />
&nbsp;&nbsp;&nbsp;1&nbsp;<span style="font-family: 宋体">在上面这个程序中，请注意不要写错驱动程序名，如果出现找不到驱动程序的错误，请检查你的驱动程序是否在类搜索路径即</span>CLASSPATH<span style="font-family: 宋体">中，</span><br />
<span style="font-family: 宋体">一般你下载的驱动程序可能是以</span>.jar<span style="font-family: 宋体">为扩展名，那么你要把此文件包含在</span>CLASSPATH<span style="font-family: 宋体">中，比如我用的</span>mysql.jar<span style="font-family: 宋体">，那么在</span>claspath<span style="font-family: 宋体">中有：</span>c:"driver"mysql.jar<span style="font-family: 宋体">。</span><br />
&nbsp;&nbsp;&nbsp;2&nbsp;<span style="font-family: 宋体">数据库服务器</span>IP<span style="font-family: 宋体">要填准确，如果在本机，请直接使用</span>localhost<span style="font-family: 宋体">，用户名和口令是你用来操作数据库的用户和口令，不要认为是操作系统的用户名和口令。</span><br />
&nbsp;&nbsp;&nbsp;3&nbsp;<span style="font-family: 宋体">最后要注意，用完一个连接后要及时关闭，养成好的习惯。</span></p>
<img src ="http://www.blogjava.net/edog/aggbug/210172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-23 22:26 <a href="http://www.blogjava.net/edog/archive/2008/06/23/210172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈Java数据库存取技术（转）</title><link>http://www.blogjava.net/edog/archive/2008/06/23/210171.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Mon, 23 Jun 2008 14:25:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/23/210171.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210171.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/23/210171.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210171.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210171.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;
<p>&nbsp;IT<span style="font-family: 宋体">技术日新月异，新技术的出现令人目不暇接，似乎每一天都在产生着新名词。不过归根结底</span>IT<span style="font-family: 宋体">所要实现的价值不外乎数据收集，然后再以客户希望的形式展示给客户而已。因此数据存取技术也就成了一个永恒的话题。而在</span>Java<span style="font-family: 宋体">这个开放的世界里，数据库存取技术是五花八门，种类繁多。我们也来侃侃</span>Java<span style="font-family: 宋体">世界里主流的数据库存取技术。</span><br />
<br />
<span style="font-family: 宋体">首先列出英雄榜</span><br />
<br />
1<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;JDBC<span style="font-family: 宋体">直接访问数据库</span><br />
2<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;EJB&nbsp;&nbsp;entity&nbsp;bean.<br />
3<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;JDO<span style="font-family: 宋体">技术。</span><br />
4<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 宋体">第三方</span>O/R<span style="font-family: 宋体">工具，如目前大红大紫的</span>Hibernate,&nbsp;<span style="font-family: 宋体">其它如</span>Castor,&nbsp;Toplink.<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;<span style="font-family: 宋体">先说说这个历史最为悠久的</span>JDBC<span style="font-family: 宋体">吧。从</span>Java<span style="font-family: 宋体">诞生的那天起，这位仁兄就开始登上历史舞台了。</span>Java<span style="font-family: 宋体">能有今天这么风光，</span>JDBC<span style="font-family: 宋体">可以说是功不可末。一路走来，如今已是</span>JDBC3.0<span style="font-family: 宋体">了。在没有</span>JDBC<span style="font-family: 宋体">的时候，访问数据库那是八仙过海，各显神通，各家数据库厂商都有自己的一套</span>API,&nbsp;<span style="font-family: 宋体">苦就苦了开发人员了。换了个数据库，那个程序要改是面目全非。</span>JDBC<span style="font-family: 宋体">规范的出台，向世界宣告从此有了访问关系数据库的标准通用接口了。</span>JDBC<span style="font-family: 宋体">标准获得了几乎所有数据库厂商的支持，好像还真难找到这么一个数据库，它是没有</span>JDBC&nbsp;<span style="font-family: 宋体">支持的。</span>JDBC<span style="font-family: 宋体">规范一经发布，获得了空前成功，很快成为</span>java<span style="font-family: 宋体">访问数据库的标准。</span>JDBC<span style="font-family: 宋体">的成功在于它的规范统一标准的接口，只需要掌握标准的</span>SQL<span style="font-family: 宋体">语言就可以访问各种不同的数据库了。这种数据库间的可移植性和</span>Java<span style="font-family: 宋体">一直高喊的口号</span>Compile&nbsp;&nbsp;Once,&nbsp;Run&nbsp;everywhere<span style="font-family: 宋体">遥相呼应。</span>JDBC<span style="font-family: 宋体">今天还是</span>java<span style="font-family: 宋体">访问数据库的基石，</span>CMP,&nbsp;JDO,&nbsp;Hibernate&nbsp;<span style="font-family: 宋体">说到底只是更好的封装了</span>JDBC,&nbsp;<span style="font-family: 宋体">提供了更为上层的更为强大的接口而已。然后说说</span>JDBC<span style="font-family: 宋体">直接访问数据库的方式来实现</span>java&nbsp;<span style="font-family: 宋体">持久性。</span><br />
<span style="font-family: 宋体">这种方式相对于</span>CMP<span style="font-family: 宋体">来说比较简单直接，特别是对于小型应用十分方便。比如，我要写一个简单的留言版程序，就没有必要</span>session&nbsp;bean&nbsp;,entity&nbsp;bean&nbsp;<span style="font-family: 宋体">，又是</span>home<span style="font-family: 宋体">接口又是远程接口，一层层调了吧。直接</span>JDBC,<span style="font-family: 宋体">写</span>SQL<span style="font-family: 宋体">语句了事。和其它持久化技术相比，</span>JDBC<span style="font-family: 宋体">直接访问数据库的方式需要程序员操心的事情多了一些，你得自己关心</span>transaction,&nbsp;<span style="font-family: 宋体">自己关心连接池，你得写大量的</span>get&nbsp;set<span style="font-family: 宋体">方法，把</span>SQL&nbsp;select<span style="font-family: 宋体">出来的值一个一个塞到你的</span>java&nbsp;object<span style="font-family: 宋体">中，或者把</span>java&nbsp;object<span style="font-family: 宋体">的值一个一个给取出来，用</span>SQL&nbsp;insert&nbsp;<span style="font-family: 宋体">到数据库，完全手动进行</span>O/R&nbsp;mapping<span style="font-family: 宋体">。为了克服这些缺点，</span>CMP,&nbsp;JDO<span style="font-family: 宋体">等等开始陆续登上历史舞台。</span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 宋体">下面</span>EJB<span style="font-family: 宋体">登场，</span>EJB<span style="font-family: 宋体">作为</span>Sun&nbsp;J2EE<span style="font-family: 宋体">体系的核心部分，是</span>Sun&nbsp;<span style="font-family: 宋体">所力推的企业级开发的首选，而</span>EJB&nbsp;entity&nbsp;<span style="font-family: 宋体">目前仍然是</span>Sun&nbsp;j2EE<span style="font-family: 宋体">白皮书所最为推荐的</span>java&nbsp;<span style="font-family: 宋体">持久化技术。</span>Entity&nbsp;Bean<span style="font-family: 宋体">作为</span>EJB<span style="font-family: 宋体">规范的一部分，也是</span>EJB<span style="font-family: 宋体">规范里面最备受争议的一种技术，它伴随着</span>EJB<span style="font-family: 宋体">规范走过了风风雨雨几个春秋。目前</span>EJB3.0<span style="font-family: 宋体">规范草案已经出台，</span><a href="http://jcp.org/en/jsr/detail?id=220">http://jcp.org/en/jsr/detail?id=220</a><span style="font-family: 宋体">。</span><br />
&nbsp;&nbsp;&nbsp;<span style="font-family: 宋体">从家庭出生来看，</span>EJB<span style="font-family: 宋体">可谓是根正苗红，规范处于</span>&nbsp;JCP<span style="font-family: 宋体">管理之下，拥有超级豪华的专家组成员，</span>&nbsp;Sun,&nbsp;IBM,&nbsp;Oracle,&nbsp;Borland,&nbsp;Bea,&nbsp;SAP,&nbsp;&nbsp;Jboss,&nbsp;&nbsp;Apache<span style="font-family: 宋体">软件基金组织等等。单从这一点来看，选它作为企业级开发，技术支持应该就无需担心了。当然向</span>IBM,&nbsp;Bea<span style="font-family: 宋体">等寻求项目咨询价格当然也不菲。从提供功能上来看，</span>EJB&nbsp;entity<span style="font-family: 宋体">经历了</span>EJB1.0,&nbsp;EJB1.1,&nbsp;EJB2.0,&nbsp;<span style="font-family: 宋体">功能也越来越完善了。包括了完善的事务支持，</span>EJBQL<span style="font-family: 宋体">查询语言，透明的分布式访问等等。不过作为一个重量级技术，</span>entity&nbsp;bean<span style="font-family: 宋体">的性能不太尽人意，这成为它备受争议的一个焦点，不知在</span>3.0<span style="font-family: 宋体">以后这个状况会不会有所改进。再有一个，它功能虽然强大，可是对于易用性来说，实在不敢恭维，写一个最简单的</span>bean<span style="font-family: 宋体">，</span>&nbsp;<span style="font-family: 宋体">也非得</span>home<span style="font-family: 宋体">接口，远程接口，要再加上</span>2.0<span style="font-family: 宋体">以后加入的本地接口，这么林林总总一大堆，足以让</span>Java<span style="font-family: 宋体">初学者望而却步了。但是这一点在一段时间内竟然也成了</span>EJB&nbsp;<span style="font-family: 宋体">功能强大，技术高深的</span>&#8220;<span style="font-family: 宋体">佐证</span>&#8221;<span style="font-family: 宋体">。记得多年以前刚毕业那阵，</span>EJB<span style="font-family: 宋体">应用在国内还比较少，公司里也没有人研究</span>Why&nbsp;EJB<span style="font-family: 宋体">这个问题，反正凡是用</span>EJB<span style="font-family: 宋体">的项目就是牛项目，用</span>EJB<span style="font-family: 宋体">的人就是牛人，分到</span>EJB<span style="font-family: 宋体">项目组的兄弟们走路都是抬头挺胸的，说话都比我等还在</span>JDBC,&nbsp;SQL<span style="font-family: 宋体">的人要高两嗓门。</span>EJB&nbsp;<span style="font-family: 宋体">技术目前盘踞着企业级应用的大部分江山，老大地位短时间内很难捍动。</span><br />
<br />
&nbsp;&nbsp;&nbsp;<span style="font-family: 宋体">下面新生代代表</span>JDO<span style="font-family: 宋体">隆重登场，</span>JDO<span style="font-family: 宋体">绝对属于超年轻选手，</span>&nbsp;JDO1.0<span style="font-family: 宋体">也不过是</span>2002<span style="font-family: 宋体">四月份才发布。</span>2003<span style="font-family: 宋体">五月份出台</span>1.0.1,&nbsp;<span style="font-family: 宋体">目前最新</span>2.0<span style="font-family: 宋体">草案已经发布，</span><a href="http://www.jcp.org/en/jsr/detail?id=243">http://www.jcp.org/en/jsr/detail?id=243</a><span style="font-family: 宋体">。就为这</span>2.0<span style="font-family: 宋体">，江湖上展开的讨论可以说是</span>&#8220;<span style="font-family: 宋体">血雨腥风</span>&#8221;<span style="font-family: 宋体">，</span>&nbsp;<span style="font-family: 宋体">两大兵团，</span>&nbsp;JDO<span style="font-family: 宋体">兵团和</span>EJB<span style="font-family: 宋体">兵团争得是不可开交。有兴趣的不妨到这里瞧瞧，</span><a href="http://theserverside.com/news/thread.tss?thread_id=25695">http://theserverside.com/news/thread.tss?thread_id=25695</a><span style="font-family: 宋体">，里面也不乏重量级人物。单从这一点来看，它能对</span>EJB<span style="font-family: 宋体">产生这么大的冲击，足以说明了这个初生牛犊确有过人之处。</span>JDO<span style="font-family: 宋体">的诞生给</span>java<span style="font-family: 宋体">数据持久性带来很多新特性，特别是它弥补了</span>EJB<span style="font-family: 宋体">对</span>OO<span style="font-family: 宋体">编程的先天不足，</span>JDO<span style="font-family: 宋体">提供了完全的</span>OO<span style="font-family: 宋体">支持，继承，多态。</span>JDO<span style="font-family: 宋体">和</span>&nbsp;EJB<span style="font-family: 宋体">比属于轻量级工具，无需容器支持。不像</span>EJB,&nbsp;<span style="font-family: 宋体">要用你就非得整一个</span>Weblogic,&nbsp;webSphere<span style="font-family: 宋体">之类的。</span><br />
JDO<span style="font-family: 宋体">的简单易用是最为人们所称道的，不需要你写大量无用的接口，不需要你继承什么特殊的类，唯一所要做的就是对你的</span>class<span style="font-family: 宋体">文件做一下</span>enhance<span style="font-family: 宋体">。用了</span>JDO,<span style="font-family: 宋体">可以说我们的</span>java<span style="font-family: 宋体">程序这下真正</span>OO<span style="font-family: 宋体">了，我们无需再理会数据库里面有啥表格了，存取都是以</span>java&nbsp;object<span style="font-family: 宋体">为对象了，所有数据库表格都是自动生成的。这一点可以说也是一个革命了。在此之前，项目设计阶段，</span>Database&nbsp;Schema<span style="font-family: 宋体">设计可以说是个重头戏。而现在用</span>JDO<span style="font-family: 宋体">开发，完全不需要数据库设计了。那你的</span>Database&nbsp;Schema<span style="font-family: 宋体">呢？</span>&nbsp;<span style="font-family: 宋体">就是你的</span>Class&nbsp;<span style="font-family: 宋体">啊，</span>JDO<span style="font-family: 宋体">会根据你的</span>Class<span style="font-family: 宋体">自动生成相应的数据库表格。</span>&nbsp;<span style="font-family: 宋体">一个字</span>&nbsp;<span style="font-family: 宋体">，</span>&nbsp;<span style="font-family: 宋体">爽！从数据库可移植性来看，</span>JDO<span style="font-family: 宋体">也是优势明显，就我使用过的</span>Kodo&nbsp;<span style="font-family: 宋体">和</span>&nbsp;Genie<span style="font-family: 宋体">来看，几个简单应用程序换数据库时候除了换一个</span>JDBC&nbsp;driver,&nbsp;<span style="font-family: 宋体">换一下数据库</span>URL,<span style="font-family: 宋体">无需对程序做任何改动。</span>&nbsp;<span style="font-family: 宋体">这一点对</span>EJB&nbsp;<span style="font-family: 宋体">来说又是处于劣势。从家庭出身来看，</span>JDO<span style="font-family: 宋体">也是出生名门，从一开始就处于</span>JCP<span style="font-family: 宋体">管理之下。从企业级支持来看，它可以很好的和</span>Session&nbsp;bean<span style="font-family: 宋体">协同工作，对于企业级开发，</span>&nbsp;Session&nbsp;bean&nbsp;+&nbsp;JDO<span style="font-family: 宋体">的方式是</span>Session&nbsp;bean&nbsp;+&nbsp;entity<span style="font-family: 宋体">方式的一个强有力竞争对手。虽然有这么多优点，不过它的发展之路也非一帆风顺，这不，今年五月份</span>JDO2.0<span style="font-family: 宋体">的投票，</span>IBM,&nbsp;Oracle,&nbsp;Bea&nbsp;<span style="font-family: 宋体">三大巨头同时投了反对票。不过稍微一想，就可以理解，这并不是</span>JDO<span style="font-family: 宋体">本身技术有什么重大缺陷，而是</span>JDO<span style="font-family: 宋体">动到这些巨头们的奶酪了。</span>Bea,&nbsp;IBM<span style="font-family: 宋体">做着业界最为著名应用服务器，</span>weblogic<span style="font-family: 宋体">和</span>WebSphere,<span style="font-family: 宋体">在</span>EJB<span style="font-family: 宋体">上面是投下了血本了，他们不能眼睁睁看着</span>JDO<span style="font-family: 宋体">来蚕食</span>EJB<span style="font-family: 宋体">市场。而</span>Oracle,&nbsp;<span style="font-family: 宋体">还在卖着它自己的</span>O/R<span style="font-family: 宋体">工具</span>Toplink,&nbsp;<span style="font-family: 宋体">看着</span>JDO<span style="font-family: 宋体">日渐强大，他能不着急么。不过呢，公司再牛，他也挡不住历史前进的车轮吧，最终</span>JDO2.0<span style="font-family: 宋体">的投票还是以绝对的票数（</span>12<span style="font-family: 宋体">：</span>3<span style="font-family: 宋体">）通过了。</span><br />
<br />
&nbsp;&nbsp;<span style="font-family: 宋体">还有其它散落江湖的</span>Java<span style="font-family: 宋体">持久化技术，如</span>Hibernate,&nbsp;Castor,&nbsp;Toplink,&nbsp;<span style="font-family: 宋体">他们虽然没有皇家血统，不过实力也是不容小视。就拿</span>Hibernate<span style="font-family: 宋体">来说，是</span>javaworld<span style="font-family: 宋体">评选出来的</span>2003<span style="font-family: 宋体">年度最佳</span>java<span style="font-family: 宋体">数据存取工具，目前可以说是大红大紫。而</span>Castor<span style="font-family: 宋体">和</span>Toplink<span style="font-family: 宋体">也算是历史悠久了，在</span>JDO<span style="font-family: 宋体">没有出世之前，它们就在江湖上混着了。目前也占据着一定的市场。这些第三方的工具从功能上来说很类似于</span>JDO,&nbsp;<span style="font-family: 宋体">只是各自的</span>API<span style="font-family: 宋体">互不相同。这也是后来</span>JDO<span style="font-family: 宋体">规范的呼声越来越高的一个原因吧。这些第三方</span>O/R&nbsp;mapping<span style="font-family: 宋体">工具能在江湖上立足，也确实都有各自过人之处。如</span>Hibernate<span style="font-family: 宋体">金字招牌就是</span>Open&nbsp;Source<span style="font-family: 宋体">，支持几乎世面上所能看到得绝大部分数据库，并且文档也非常齐全。</span>Toplink<span style="font-family: 宋体">么，可谓历史悠久，又榜着</span>Oracle<span style="font-family: 宋体">这棵大树。目前来看，这些工具也占据着</span>java<span style="font-family: 宋体">数据库存取的不小市场。个人觉得，随着</span>JDO<span style="font-family: 宋体">规范的不段完善，</span>JDO<span style="font-family: 宋体">产品的普及，这一部分人员可能会在以后渐渐退出历史舞台。不过从</span>Hibernate<span style="font-family: 宋体">目前如日中天的气势来看，好像说这句话还为时过早。</span><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 宋体">关于这些技术优劣之争从它们刚刚出生那天起从来就没有停止过，而各家各派也从来没有能够说服过对方。对于我们应用开发者而言，撇开应用纯粹来争论技术优劣并没有多大意义。还是俗话说的好，没有最好的，只有最合适的。我们能够在做开发的时候能够选择一个最合适于自己应用的技术，那就足够了。总的来说，</span>JDBC<span style="font-family: 宋体">面向</span>RDBMS,<span style="font-family: 宋体">比较适合关系数据库模式驱动的应用，例如统计表格数据，生成报表之类的应用。</span>EJB&nbsp;<span style="font-family: 宋体">技术以</span>J2EE<span style="font-family: 宋体">应用服务器为中心，如果你的应用确实需要灵活的可声明的事务边界，需要支持大容量的访问和不间断的服务，需要应用服务器的集群，那么选</span>EJB<span style="font-family: 宋体">吧。</span>JDO<span style="font-family: 宋体">则面向对象，对于以域对象为中心的应用，包含图，树模型的应用，</span>JDO<span style="font-family: 宋体">是首选。</span><br />
<br />
<span style="font-family: 宋体">后记，今天得闲，偶尔发现自己这篇三年多前的的小文章还在，感叹一下光阴似箭，逝者如斯夫。三年过去了，</span>JDO<span style="font-family: 宋体">并非像当年想象那样能一统江湖，</span>Hibernate<span style="font-family: 宋体">俨然已成王者。看来</span>JDO&nbsp;<span style="font-family: 宋体">只能像当年周郎发出无奈的感慨，既生瑜，何生亮</span>........<br />
caowei&nbsp;(cn.caowei@gmail.com)&nbsp;<span style="font-family: 宋体">于</span>14.Dec.2007.</p>
<img src ="http://www.blogjava.net/edog/aggbug/210171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-23 22:25 <a href="http://www.blogjava.net/edog/archive/2008/06/23/210171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC驱动下载汇总</title><link>http://www.blogjava.net/edog/archive/2008/06/23/210168.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Mon, 23 Jun 2008 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/23/210168.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210168.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/23/210168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210168.html</trackback:ping><description><![CDATA[&nbsp;
<p>为了自己JDBC驱动下载方便快捷，也便于网友的使用，特意把这些JDBC的驱动包下载汇总如下，。。。。说明：此内容来源于网络！。。。。。</p>
<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/edog/aggbug/210168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-23 22:24 <a href="http://www.blogjava.net/edog/archive/2008/06/23/210168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java连接access数据库</title><link>http://www.blogjava.net/edog/archive/2008/06/23/210167.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Mon, 23 Jun 2008 14:21:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/23/210167.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210167.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/23/210167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210167.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210167.html</trackback:ping><description><![CDATA[转自：<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><a href="http://blog.csdn.net/guofangsky/archive/2006/11/30/1422038.aspx">http://blog.csdn.net/guofangsky/archive/2006/11/30/1422038.aspx</a></span><br />
<br />
&nbsp;
<div style="border-right: #cccccc 0.75pt solid; padding-right: 0cm; border-top: #cccccc 0.75pt solid; padding-left: 0cm; padding-bottom: 0cm; border-left: #cccccc 0.75pt solid; padding-top: 0cm; border-bottom: #cccccc 0.75pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><strong><span style="font-size: 9pt; color: black; font-family: Verdana">JDBC</span></strong><span style="font-size: 9pt; color: black; font-family: Verdana">(Java DataBase Connectivity)</span><span style="font-size: 9pt; color: black">是</span><span style="font-size: 9pt; color: black; font-family: Verdana">Java</span><span style="font-size: 9pt; color: black">数据库连接</span><span style="font-size: 9pt; color: black; font-family: Verdana">API</span><span style="font-size: 9pt; color: black">。</span><span style="font-size: 9pt; color: black; font-family: Verdana">JDBC</span><span style="font-size: 9pt; color: black">能完成与一个数据库建立连接，然后向数据库发送</span><span style="font-size: 9pt; color: black; font-family: Verdana">SQL</span><span style="font-size: 9pt; color: black">语句，再处理数据库返回的结果。</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><strong><span style="font-size: 9pt; color: black; font-family: Verdana">JDBC</span></strong><span style="font-size: 9pt; color: black">在设计上和</span><strong><span style="font-size: 9pt; color: black; font-family: Verdana">ODBC</span></strong><span style="font-size: 9pt; color: black">相似。</span><span style="font-size: 9pt; color: black; font-family: Verdana">JDBC</span><span style="font-size: 9pt; color: black">和数据库建立连接的一种方式是首先建立起一个</span><strong><span style="font-size: 9pt; color: black; font-family: Verdana">JDBC-ODBC</span></strong><strong><span style="font-size: 9pt; color: black">桥接器</span></strong><span style="font-size: 9pt; color: black">。</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black">首先安装</span><span style="font-size: 9pt; color: black; font-family: Verdana">office2000,</span><span style="font-size: 9pt; color: black">就有了</span><span style="font-size: 9pt; color: black; font-family: Verdana">Access2000,</span><span style="font-size: 9pt; color: black">启动</span><span style="font-size: 9pt; color: black; font-family: Verdana">Access,</span><span style="font-size: 9pt; color: black">建立新数据库</span><strong><span style="font-size: 9pt; color: #f70938; font-family: Verdana">mess.mdb</span></strong><span style="font-size: 9pt; color: black; font-family: Verdana">,</span><span style="font-size: 9pt; color: black">建立包含两个文本型字段</span><strong><span style="font-size: 9pt; color: black; font-family: Verdana">name</span></strong><span style="font-size: 9pt; color: black">和</span><strong><span style="font-size: 9pt; color: black; font-family: Verdana">sex</span></strong><span style="font-size: 9pt; color: black">的表</span><span style="font-size: 9pt; color: black; font-family: Verdana">,</span><span style="font-size: 9pt; color: black">表名为</span><strong><span style="font-size: 9pt; color: #ff0066; font-family: Verdana">member</span></strong><span style="font-size: 9pt; color: black">，随便录入一些字符串到</span><span style="font-size: 9pt; color: black; font-family: Verdana">member</span><span style="font-size: 9pt; color: black">表中，保存在任意目录下，比如说</span><span style="font-size: 9pt; color: black; font-family: Verdana">C</span><span style="font-size: 9pt; color: black">盘下。然后打开<strong>控制面板</strong></span><span style="font-size: 9pt; color: black; font-family: Verdana"> -&gt; </span><strong><span style="font-size: 9pt; color: black">管理工具</span></strong><span style="font-size: 9pt; color: black; font-family: Verdana"> -&gt; </span><strong><span style="font-size: 9pt; color: black">数据源</span></strong><strong><span style="font-size: 9pt; color: black; font-family: Verdana"> (ODBC)</span></strong><span style="font-size: 9pt; color: black; font-family: Verdana">,</span><span style="font-size: 9pt; color: black">选择</span><span style="font-size: 9pt; color: black; font-family: Verdana">"</span><strong><span style="font-size: 9pt; color: black">系统</span></strong><strong><span style="font-size: 9pt; color: black; font-family: Verdana">DSN</span></strong><span style="font-size: 9pt; color: black; font-family: Verdana">",</span><span style="font-size: 9pt; color: black">也可以选择</span><span style="font-size: 9pt; color: black; font-family: Verdana">"</span><span style="font-size: 9pt; color: black">用户</span><span style="font-size: 9pt; color: black; font-family: Verdana">DSN"</span><span style="font-size: 9pt; color: black">选项卡</span><span style="font-size: 9pt; color: black; font-family: Verdana">,</span><span style="font-size: 9pt; color: black">系统的</span><span style="font-size: 9pt; color: black; font-family: Verdana">DSN</span><span style="font-size: 9pt; color: black">对每个用户都适用可避免调试时出现的权限问题，单击&#8220;<strong>添加</strong>&#8221;，选择如下图的项目</span><span style="font-size: 9pt; color: black; font-family: Verdana">:</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black">点击</span><span style="font-size: 9pt; color: black; font-family: Verdana">"</span><span style="font-size: 9pt; color: black">完成</span><span style="font-size: 9pt; color: black; font-family: Verdana">",</span><span style="font-size: 9pt; color: black">弹出的对话框里将</span><span style="font-size: 9pt; color: black; font-family: Verdana">"</span><strong><span style="font-size: 9pt; color: black">数据源名</span></strong><span style="font-size: 9pt; color: black; font-family: Verdana">"</span><span style="font-size: 9pt; color: black">一项设为你喜欢的名字</span><span style="font-size: 9pt; color: black; font-family: Verdana">,</span><span style="font-size: 9pt; color: black">比如</span><strong><span style="font-size: 9pt; color: black; font-family: Verdana">redsun</span></strong><span style="font-size: 9pt; color: black">。点</span><span style="font-size: 9pt; color: black; font-family: Verdana">"</span><strong><span style="font-size: 9pt; color: black">选择</span></strong><span style="font-size: 9pt; color: black; font-family: Verdana">"</span><span style="font-size: 9pt; color: black">，找到</span><span style="font-size: 9pt; color: black; font-family: Verdana">"C:"mess.mdb"</span><span style="font-size: 9pt; color: black">文件，如此一个</span><span style="font-size: 9pt; color: black; font-family: Verdana">ODBC</span><span style="font-size: 9pt; color: black">数据源就配置好了。</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black">要连接该数据源</span><span style="font-size: 9pt; color: black; font-family: Verdana">,</span><span style="font-size: 9pt; color: black">也就是连接数据库，首先要建立一个</span><span style="font-size: 9pt; color: black; font-family: Verdana">JDBC-ODBC</span><span style="font-size: 9pt; color: black">桥接器，上面已经说过了，其方法是</span><span style="font-size: 9pt; color: black; font-family: Verdana">:</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><strong><span style="font-size: 9pt; background: black; color: #eeeeee; font-family: Verdana">Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</span></strong></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black; font-family: Verdana">Class </span><span style="font-size: 9pt; color: black">是</span><span style="font-size: 9pt; color: black; font-family: Verdana">Java.lang</span><span style="font-size: 9pt; color: black">包中的一个类，通过调用它的静态方法</span><span style="font-size: 9pt; color: black; font-family: Verdana">forName</span><span style="font-size: 9pt; color: black">就可以建立桥接器。但建立桥接器时可能发生异常，这是我们所不想见到的，因此要捕获这个异常</span><span style="font-size: 9pt; color: black; font-family: Verdana">:</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><strong><span style="font-size: 9pt; color: black; font-family: Verdana">try{</span></strong><strong><span style="font-size: 9pt; color: black; font-family: Verdana"><br />
<strong>&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</strong><br />
<strong>&nbsp;}</strong><br />
<strong>catch(ClassNotFoundException e){</strong></span></strong><strong><span style="font-size: 9pt; color: black">异常捕获</span></strong><strong><span style="font-size: 9pt; color: black; font-family: Verdana">}</span></strong></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black">然后就是连接数据库了</span><span style="font-size: 9pt; color: black; font-family: Verdana">,</span><span style="font-size: 9pt; color: black">这里要用到</span><span style="font-size: 9pt; color: black; font-family: Verdana">java.sql</span><span style="font-size: 9pt; color: black">包中的</span><span style="font-size: 9pt; color: black; font-family: Verdana">Connection</span><span style="font-size: 9pt; color: black">类声明一个对象，再用类</span><span style="font-size: 9pt; color: black; font-family: Verdana">DriverManager</span><span style="font-size: 9pt; color: black">调用它的静态方法</span><span style="font-size: 9pt; color: black; font-family: Verdana">getConnection</span><span style="font-size: 9pt; color: black">创建这个连接。</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><strong><span style="font-size: 9pt; color: black; font-family: Verdana">Connection con=DriverManager.getConnection("jdbc:odbc:</span></strong><strong><span style="font-size: 9pt; color: black">数据源名字</span></strong><strong><span style="font-size: 9pt; color: black; font-family: Verdana">","</span></strong><strong><span style="font-size: 9pt; color: black">数据源用户名</span></strong><strong><span style="font-size: 9pt; color: black; font-family: Verdana">","</span></strong><strong><span style="font-size: 9pt; color: black">数据源密码</span></strong><strong><span style="font-size: 9pt; color: black; font-family: Verdana">");</span></strong></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black">为防止连接出现异常，这里也要有个异常的处理，具体看代码</span><span style="font-size: 9pt; color: black; font-family: Verdana">:</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black; font-family: Verdana">=========access.java============</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black; font-family: 宋体">程序代码</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black; font-family: Verdana">import java.sql.*;<br />
public class access{<br />
public static void main(String args[]){<br />
&nbsp;Connection con;<br />
&nbsp;Statement sql; //</span><span style="font-size: 9pt; color: black">声明</span><span style="font-size: 9pt; color: black; font-family: Verdana">Statement</span><span style="font-size: 9pt; color: black">对象</span><span style="font-size: 9pt; color: black; font-family: Verdana"><br />
&nbsp;ResultSet rs;<br />
try{<br />
&nbsp;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<br />
&nbsp;}<br />
catch(ClassNotFoundException e){<br />
System.out.println(""+e);<br />
}<br />
try{<br />
&nbsp;con=DriverManager.getConnection("jdbc:odbc:redsun","","");<br />
sql=con.createStatement();<br />
rs=sql.executeQuery("Select * FROM member");<br />
while(rs.next()){<br />
&nbsp;String name=rs.getString(1); //</span><span style="font-size: 9pt; color: black">获得数据库第一列</span><span style="font-size: 9pt; color: black; font-family: Verdana"><br />
&nbsp;String sex=rs.getString(2); <br />
System.out.println("</span><span style="font-size: 9pt; color: black">姓名</span><span style="font-size: 9pt; color: black; font-family: Verdana">:"+name); //</span><span style="font-size: 9pt; color: black">输出信息</span><span style="font-size: 9pt; color: black; font-family: Verdana"><br />
System.out.println("</span><span style="font-size: 9pt; color: black">性别</span><span style="font-size: 9pt; color: black; font-family: Verdana">:"+sex);<br />
&nbsp;&nbsp; }<br />
con.close();<br />
}<br />
catch(SQLException el){}<br />
&nbsp;}<br />
}</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black">编绎</span><span style="font-size: 9pt; color: black; font-family: Verdana">access.java, </span><span style="font-size: 9pt; color: black">然后在命令提示符中先切换到编绎后的</span><span style="font-size: 9pt; color: black; font-family: Verdana">access.class</span><span style="font-size: 9pt; color: black">的目录</span><span style="font-size: 9pt; color: black; font-family: Verdana">,</span><span style="font-size: 9pt; color: black">执行</span><span style="font-size: 9pt; color: black; font-family: Verdana">:</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><strong><span style="font-size: 9pt; color: black; font-family: Verdana">java access</span></strong><span style="font-size: 9pt; color: black">回车</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black">结果如图显示</span><span style="font-size: 9pt; color: black; font-family: Verdana">:</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><span style="font-size: 9pt; color: black">以上这个例子只是简单的连接数据库，并静态游标方式显示数据，更新、删除和添加数据库以前学过</span><span style="font-size: 9pt; color: black; font-family: Verdana">sql</span><span style="font-size: 9pt; color: black">的很容易理解，语法为</span><span style="font-size: 9pt; color: black; font-family: Verdana">:</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><strong><span style="font-size: 9pt; color: black; font-family: Verdana">String xx="sql</span></strong><strong><span style="font-size: 9pt; color: black">语句</span></strong><strong><span style="font-size: 9pt; color: black; font-family: Verdana">";</span></strong></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; word-break: break-all; line-height: 150%; padding-top: 0cm; border-bottom: medium none"><strong><span style="font-size: 9pt; color: black; font-family: Verdana">Statement</span></strong><strong><span style="font-size: 9pt; color: black">对象</span></strong><strong><span style="font-size: 9pt; color: black; font-family: Verdana">.executeUpdate(xx);</span></strong></p>
</div>
<img src ="http://www.blogjava.net/edog/aggbug/210167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-23 22:21 <a href="http://www.blogjava.net/edog/archive/2008/06/23/210167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC来连接Oracle数据库时的一些技巧</title><link>http://www.blogjava.net/edog/archive/2008/06/23/210165.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Mon, 23 Jun 2008 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/23/210165.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210165.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/23/210165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210165.html</trackback:ping><description><![CDATA[&nbsp;
<p><span lang="EN-US">1、在客户端软件开发中使用Thin驱动程序</span></p>
<p>　　在开发<strong><span lang="EN-US" style="background: #ffff66; color: black">Java</span></strong>软件方面，<span lang="EN-US">Oracle的数据库提供了四种类型的驱动程序，二种用于应用软件、applets、servlets等客户端软件，另外二种用于数据库中的<strong><span style="background: #ffff66; color: black">Java</span></strong>存储过程等服务器端软件。在客户机端软件的开发中，我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用<strong><span style="background: #ffff66; color: black">Java</span></strong>本地化接口（JNI），通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序，它直接与数据库进行通讯。为了获得最高的性能，Oracle建议在客户端软件的开发中使用OCI驱动程序，这似乎是正确的。但我建议使用Thin驱动程序，因为通过多次测试发现，在通常情况下，Thin驱动程序的性能都超过了OCI驱动程序。</span></p>
<p>　　<span lang="EN-US">2、关闭自动提交功能，提高系统性能</span></p>
<p>　　在第一次建立与数据库的连接时，在缺省情况下，连接是在自动提交模式下的。为了获得更好的性能，可以通过调用带布尔值<span lang="EN-US">false参数的Connection类的setAutoCommit()方法关闭自动提交功能，如下所示：</span></p>
<p>　　<span lang="EN-US">conn.setAutoCommit(false);</span></p>
<p>　　值得注意的是，一旦关闭了自动提交功能，我们就需要通过调用<span lang="EN-US">Connection类的commit()和rollback()方法来人工的方式对事务进行管理。</span></p>
<p>　　<span lang="EN-US">3、在动态SQL或有时间限制的命令中使用Statement对象</span></p>
<p>　　在执行<span lang="EN-US">SQL命令时，我们有二种选择：可以使用PreparedStatement对象，也可以使用Statement对象。无论多少次地使用同一个SQL命令，PreparedStatement都只对它解析和编译一次。当使用Statement对象时，每次执行一个SQL命令时，都会对它进行解析和编译。这可能会使你认为，使用PreparedStatement对象比使用Statement对象的速度更快。然而，我进行<br />
的测试表明，在客户端软件中，情况并非如此。因此，在有时间限制的SQL操作中，除非成批地处理SQL命令，我们应当考虑使用Statement对象。</span></p>
<p>　　此外，使用<span lang="EN-US">Statement对象也使得编写动态SQL命令更加简单，因为我们可以将字符串连接在一起，建立一个有效的SQL命令。因此，我认为，Statement对象可以使动态SQL命令的创建和执行变得更加简单。</span></p>
<p>　　<span lang="EN-US">4、利用helper函数对动态SQL命令进行格式化</span></p>
<p>　　在创建使用<span lang="EN-US">Statement对象执行的动态SQL命令时，我们需要处理一些格式化方面的问题。例如，如果我们想创建一个将名字O'Reilly插入表中的SQL命令，则必须使用二个相连的&#8220;''&#8221;号替换O'Reilly中的&#8220;'&#8221;号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法，然后在连接字符串心服用公式表达一个SQL命令时，使用创建的helper方法。与此类似的是，我们可以让helper方法接受一个Date型的值，然后让它输出基于Oracle的to_date()函数的字符串表达式。</span></p>
<p>　　<span lang="EN-US">5、利用PreparedStatement对象提高数据库的总体效率</span></p>
<p>　　在使用<span lang="EN-US">PreparedStatement对象执行SQL命令时，命令被数据库进行解析和编译，然后被放到命令缓冲区。然后，每当执行同一个PreparedStatement对象时，它就会被再解析一次，但不会被再次编译。在缓冲区中可以发现预编译的命令，并且可以重新使用。在有大量用户的企业级应用软件中，经常会重复执行相同的SQL命令，使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务，我会建议在除动态SQL命令之外的所有情况下<br />
使用PreparedStatement对象。</span></p>
<p>　　<span lang="EN-US">6、在成批处理重复的插入或更新操作中使用PreparedStatement对象</span></p>
<p>　　如果成批地处理插入和更新操作，就能够显著地减少它们所需要的时间。<span lang="EN-US">Oracle提供的Statement和 CallableStatement并不真正地支持批处理，只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理，或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制，可以以如下所示的<br />
方式调用setExecuteBatch()：&nbsp;</span></p>
<p><span lang="EN-US">PreparedStatement pstmt3D null;<br />
try {<br />
　((OraclePreparedStatement)pstmt).setExecuteBatch(30);<br />
　...<br />
　pstmt.executeUpdate();<br />
}&nbsp; </span></p>
<p>　　调用<span lang="EN-US">setExecuteBatch()时指定的值是一个上限，当达到该值时，就会自动地引发SQL命令执行，标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。</span></p>
<p>　　<span lang="EN-US">7、使用Oracle locator方法插入、更新大对象（LOB）</span></p>
<p>　　<span lang="EN-US">Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理，尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值，也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB，但需要使用locator才能获取LOB的值。由于存在这二个问题，因此，我建议使用locator的方法来插入、更新或获取LOB的值。</span></p>
<p>　　<span lang="EN-US">8、使用SQL92语法调用存储过程</span></p>
<p>　　在调用存储过程时，我们可以使用<span lang="EN-US">SQL92或Oracle PL/SQL，由于使用Oracle PL/SQL并没有什么实际的好处，而且会给以后维护你的应用程序的开发人员带来麻烦，因此，我建议在调用存储过程时使用SQL92。</span></p>
<p>　　<span lang="EN-US">9、使用Object SQL将对象模式转移到数据库中</span></p>
<p>　　既然可以将<span lang="EN-US">Oracle的数据库作为一种面向对象的数据库来使用，就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建<strong><span style="background: #ffff66; color: black">Java</span></strong> bean作为伪装的数据库对象，将它们的属性映射到关系表中，然后在这些bean中添加方法。尽管这样作在<strong><span style="background: #ffff66; color: black">Java</span></strong>中没有什么问题，但由于操作都是在数据库之外进行的，因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术，可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作，然后使用JPublisher等工具生成自己的<strong><span style="background: #ffff66; color: black">Java</span></strong> bean类。如果使用这种方式，不但<strong><span style="background: #ffff66; color: black">Java</span></strong>应用程序可以使用应用软件的对象模式，其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。</span></p>
<p>　　<span lang="EN-US">10、利用SQL完成数据库内的操作</span></p>
<p>　　我要向大家介绍的最重要的经验是充分利用<span lang="EN-US">SQL的面向集合的方法来解决数据库处理需求，而不是使用<strong><span style="background: #ffff66; color: black">Java</span></strong>等过程化的编程语言。</span></p>
<p>　　如果编程人员要在一个表中查找许多行，结果中的每个行都会查找其他表中的数据，最后，编程人员创建了独立的<span lang="EN-US">UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务，何必要让数据在网上流来流去的？我建议用户认真学习如何最大限度地发挥SQL的功能。</span></p>
<img src ="http://www.blogjava.net/edog/aggbug/210165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-23 22:17 <a href="http://www.blogjava.net/edog/archive/2008/06/23/210165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC连接MySql方式</title><link>http://www.blogjava.net/edog/archive/2008/06/23/210163.html</link><dc:creator>edog</dc:creator><author>edog</author><pubDate>Mon, 23 Jun 2008 14:16:00 GMT</pubDate><guid>http://www.blogjava.net/edog/archive/2008/06/23/210163.html</guid><wfw:comment>http://www.blogjava.net/edog/comments/210163.html</wfw:comment><comments>http://www.blogjava.net/edog/archive/2008/06/23/210163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/edog/comments/commentRss/210163.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/edog/services/trackbacks/210163.html</trackback:ping><description><![CDATA[&nbsp;
<p>下面是使用<span lang="EN-US">JDBC连接MySql的一个小的教程 </span></p>
<p><span lang="EN-US">1、查找驱动程序</span></p>
<p>　　<span lang="EN-US">MySQL目前提供的<strong><span style="background: #ffff66; color: black">java</span></strong>驱动程序为Connection/J，可以从MySQL官方网站下载，并找到mysql-connector-<strong><span style="background: #ffff66; color: black">java</span></strong>-3.0.15-ga-bin.jar文件，此驱动程序为纯<strong><span style="background: #ffff66; color: black">java</span></strong>驱动程序，不需做其他配置。</span></p>
<p>　　<span lang="EN-US">2、动态指定classpath</span></p>
<p>　　如果需要执行时动态指定<span lang="EN-US">classpath，就在执行时采用－cp方式。否则将上面的.jar文件加入到classpath环境变量中。</span></p>
<p>　　<span lang="EN-US">3、加载驱动程序</span></p>
<p><span lang="EN-US">try{<br />
　Class.forName(com.mysql.jdbc.Driver);<br />
　System.out.println(Success loading Mysql Driver!);<br />
}catch(Exception e)<br />
{<br />
　System.out.println(Error loading Mysql Driver!);<br />
　e.printStackTrace();<br />
} </span></p>
<p>　　<span lang="EN-US">4、设置连接的url</span></p>
<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">jdbc</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">mysql</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">//localhost/databasename[?pa=va][</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">＆</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">pa=va]</span>
<img src ="http://www.blogjava.net/edog/aggbug/210163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/edog/" target="_blank">edog</a> 2008-06-23 22:16 <a href="http://www.blogjava.net/edog/archive/2008/06/23/210163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>