﻿<?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-My Java Blog-文章分类-JDBC</title><link>http://www.blogjava.net/mailguest/category/34692.html</link><description>MailGuest's Java Blog</description><language>zh-cn</language><lastBuildDate>Sun, 21 Sep 2008 22:23:57 GMT</lastBuildDate><pubDate>Sun, 21 Sep 2008 22:23:57 GMT</pubDate><ttl>60</ttl><item><title>The First Day (Writing online)</title><link>http://www.blogjava.net/mailguest/articles/My_JDBC_study_notes.html</link><dc:creator>mailguest</dc:creator><author>mailguest</author><pubDate>Wed, 17 Sep 2008 16:59:00 GMT</pubDate><guid>http://www.blogjava.net/mailguest/articles/My_JDBC_study_notes.html</guid><wfw:comment>http://www.blogjava.net/mailguest/comments/229572.html</wfw:comment><comments>http://www.blogjava.net/mailguest/articles/My_JDBC_study_notes.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mailguest/comments/commentRss/229572.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mailguest/services/trackbacks/229572.html</trackback:ping><description><![CDATA[<span style="font-family: Arial">
<p>JDBC：<br />
&nbsp;&nbsp;&nbsp; |-- 数据库互联。<br />
&nbsp;&nbsp;&nbsp; |-- 由SUN公司所制定的用来访问数据库的规范。<br />
&nbsp;&nbsp;&nbsp; |-- 数据库数据 &lt;= 交互 =&gt; 应用程序。</p>
<p>JDBC包含主要两个部分：<br />
&nbsp;&nbsp;&nbsp; |-- part 1.由SUN公司制定的规范接口<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- java.sql&nbsp;&nbsp;&nbsp; --&gt;&nbsp; 核心包<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- javax.sql&nbsp; --&gt;&nbsp; 扩展包<br />
&nbsp;&nbsp;&nbsp; |-- part 2.由数据库厂商所提供的数据库驱动程序，它们实现了part 1部分。</p>
<p>JDBC的驱动程序包含以下四种类型：<br />
&nbsp;&nbsp;&nbsp; |-- 第一代驱动（JDBC - ODBC Bridge）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- 首先把JDBC的调用转换成ODBC的调用，再用ODBC与具体的数据库系统通信。<br />
&nbsp;&nbsp;&nbsp; |-- 第二代驱动 （Native - API party - Java driver 本地API部分Java驱动）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- Conrerts JDBC calls into calls on the native client API of a specific RODMS.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- 缺点：不同的数据库需要安装不同的客户端（每台电脑都要装）。<br />
&nbsp;&nbsp;&nbsp; |-- 第三代驱动 （JDBC - net pure Java driver 网络纯Java驱动）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- 提供网络节点，通过网络节点访问数据库。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- Translates JDBC calls into a DBMS independent net protocol, which is then translated&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to a&nbsp;DBMS protocol by a server.<br />
&nbsp;&nbsp;&nbsp; |-- 第四代驱动 （Native protocol pure Java driver 本地协议纯Java驱动）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- Conrerts JDBC calls directly into the network protocol used by DBMS.<br />
<br />
JDBC核心API<br />
java.sql<br />
|--&nbsp;&nbsp;&nbsp;&nbsp;Driver&nbsp;&nbsp;&nbsp;&nbsp;[Interface]&nbsp;&nbsp;&nbsp;&nbsp;所有驱动必需实现的接口</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;DriverManager&nbsp;&nbsp;&nbsp;&nbsp;[Class]&nbsp;&nbsp;&nbsp;&nbsp;用来管理一组数据库的驱动</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;&nbsp;&nbsp;&nbsp;[Interface]&nbsp;&nbsp;&nbsp;&nbsp;与数据库的一个连接对象</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;&nbsp;&nbsp;&nbsp;[Interface]&nbsp;&nbsp;&nbsp;&nbsp;用于执行一个静态的SQL语句，并返回它所生成的结果对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;|--&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;&nbsp;&nbsp;&nbsp;[Interface]&nbsp;&nbsp;&nbsp;&nbsp;表示预编译SQL语句对象（动态）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--&nbsp;&nbsp;&nbsp;&nbsp;CallableStatement&nbsp;&nbsp;&nbsp;&nbsp;[interface]&nbsp;&nbsp;&nbsp;&nbsp;表示用来调用存储过程对象</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;&nbsp;&nbsp;&nbsp;[Interface]&nbsp;&nbsp;&nbsp;&nbsp;存放查询结果集的对象</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;&nbsp;&nbsp;&nbsp;[Class]&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;Blob&nbsp;&nbsp;&nbsp;&nbsp;[Interface]&nbsp;&nbsp;&nbsp;&nbsp;二进制大对象</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;Clob&nbsp;&nbsp;&nbsp;&nbsp;[Interface]&nbsp;&nbsp;&nbsp;&nbsp;字符大对象</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;SQLException&nbsp;&nbsp;&nbsp;&nbsp;[Class]&nbsp;&nbsp;&nbsp;&nbsp;数据库最底层异常（已检测异常）<br />
&nbsp;&nbsp;&nbsp;&nbsp;|--&nbsp;&nbsp;&nbsp;&nbsp;SQLWarning&nbsp;&nbsp;&nbsp;&nbsp;[Class]&nbsp;&nbsp;&nbsp;&nbsp;警告</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;DatabaseMetaData&nbsp;&nbsp;&nbsp;&nbsp;[Class]&nbsp;&nbsp;&nbsp;&nbsp;基本数据的元数据</p>
<p>|--&nbsp;&nbsp;&nbsp;&nbsp;ResultSetMetaDate&nbsp;&nbsp;&nbsp;&nbsp;[Class]&nbsp;&nbsp;&nbsp;&nbsp;结果集的元数据<br />
</p>
<p><br />
&nbsp;编写JDBC程序步骤<br />
step1：注册驱动程序&nbsp;&nbsp;&nbsp;&nbsp;[也就是把驱动加载到JVM中]<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.Class.forName("驱动类的全限定名");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如：Class.forName("oracle.jdbc.driver.OracleDriver");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName("com.mysql.jdbc.Driver");<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.使用new操作符来创建驱动类对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如：Driver d = new&nbsp;oracle.jdbc.driver.OracleDriver();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DriverManager.registerDriver(d);<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.使用系统属性-Djava.drivers来指定驱动类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如：-Djava.drivers = com.mysql.jdbc.Driver;<br />
step2：获取数据库连接&nbsp;&nbsp;&nbsp;&nbsp;[Connection]<br />
&nbsp;&nbsp;&nbsp;&nbsp;如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;String url = "主协议:此协议:thin:@ip地址:端口号:数据库实例名";<br />
&nbsp;&nbsp;&nbsp;&nbsp;String user = "XXX";<br />
&nbsp;&nbsp;&nbsp;&nbsp;String pwd = "XXX";<br />
&nbsp;&nbsp;&nbsp;&nbsp;Connection con = DriverManager.getConnection(url,user,pwd);<br />
step3：创建执行的SQL的环境&nbsp;&nbsp;&nbsp;&nbsp;[也就是创建Statement]<br />
&nbsp;&nbsp;&nbsp;&nbsp;如：Statement stm = con.createStatement();<br />
step4：执行SQL语句<br />
&nbsp;&nbsp;&nbsp;&nbsp;如：String sql = "select ..........";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet rs = stm.executeQuary(sql);<br />
step5：如果是select语句，则处理结果集&nbsp;&nbsp;&nbsp;&nbsp;[ResultSet]<br />
&nbsp;&nbsp;&nbsp;&nbsp;如：while(rs.next()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.getXXX系列的方法();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
step6：释放资源&nbsp;&nbsp;&nbsp;&nbsp;[close]<br />
&nbsp;&nbsp;&nbsp;&nbsp;如：if(con != null) con.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(stm != null) stm.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(rs != null) rs.close();</p>
</span>
<img src ="http://www.blogjava.net/mailguest/aggbug/229572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mailguest/" target="_blank">mailguest</a> 2008-09-18 00:59 <a href="http://www.blogjava.net/mailguest/articles/My_JDBC_study_notes.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>