﻿<?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-宝贝小猪唛-文章分类-数据库相关</title><link>http://www.blogjava.net/yanpeng/category/17928.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 20:20:44 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 20:20:44 GMT</pubDate><ttl>60</ttl><item><title>JDBC基础教程之PreparedStatement</title><link>http://www.blogjava.net/yanpeng/articles/85600.html</link><dc:creator>宝贝小猪唛</dc:creator><author>宝贝小猪唛</author><pubDate>Tue, 05 Dec 2006 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/yanpeng/articles/85600.html</guid><wfw:comment>http://www.blogjava.net/yanpeng/comments/85600.html</wfw:comment><comments>http://www.blogjava.net/yanpeng/articles/85600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanpeng/comments/commentRss/85600.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanpeng/services/trackbacks/85600.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">该 PreparedStatement 接口继承 Statement，并与之在两方面有所不同：<br />PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的，该语句为每个 IN 参数保留一个问号（“？”）作为占位符。每个问号的值必须在该语句执行之前，通过适当的setXXX 方法来提供。<br />由于 PreparedStatement 对象已预编译过，所以其执行速度要快于 Statement 对象。因此，多次执行的 SQL 语句经常创建为 PreparedStatement 对象，以提高效率。<br />作为 Statement 的子类，PreparedStatement 继承了 Statement 的所有功能。另外它还添加了一整套方法，用于设置发送给数据库以取代 IN 参数占位符的值。同时，三种方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数。这些方法的 Statement 形式（接受 SQL 语句参数的形式）不应该用于 PreparedStatement 对象。<br /><strong>1、创建 PreparedStatement 对象</strong><br /><br />　　以下的代码段（其中 con 是 Connection 对象）创建包含带两个 IN 参数占位符的 SQL 语句的 PreparedStatement 对象：<br /><br />PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");<br /><br />　　pstmt 对象包含语句 "UPDATE table4 SET m = ? WHERE x = ?"，它已发送给DBMS，并为执行作好了准备。<br /><br />　　<strong>2、传递 IN 参数</strong><br /><br />　　在执行 PreparedStatement 对象之前，必须设置每个 ? 参数的值。这可通过调用 setXXX 方法来完成，其中 XXX 是与该参数相应的类型。例如，如果参数具有Java 类型 long，则使用的方法就是 setLong。setXXX 方法的第一个参数是要设置的参数的序数位置，第二个参数是设置给该参数的值。例如，以下代码将第一个参数设为 123456789，第二个参数设为 100000000：<br /><br /></font>
		</p>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1">
				<tbody>
						<tr>
								<td>
										<font size="2">pstmt.setLong(1, 123456789);<br />pstmt.setLong(2, 100000000);</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="2">　　一旦设置了给定语句的参数值，就可用它多次执行该语句，直到调用clearParameters 方法清除它为止。在连接的缺省模式下（启用自动提交），当语句完成时将自动提交或还原该语句。<br /><br />　　如果基本数据库和驱动程序在语句提交之后仍保持这些语句的打开状态，则同一个 PreparedStatement 可执行多次。如果这一点不成立，那么试图通过使用PreparedStatement 对象代替 Statement 对象来提高性能是没有意义的。<br /><br />　　利用 pstmt（前面创建的 PreparedStatement 对象），以下代码例示了如何设置两个参数占位符的值并执行 pstmt 10 次。如上所述，为做到这一点，数据库不能关闭 pstmt。在该示例中，第一个参数被设置为 "Hi"并保持为常数。在 for 循环中，每次都将第二个参数设置为不同的值：从 0 开始，到 9 结束。<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1">
				<tbody>
						<tr>
								<td>
										<font size="2">pstmt.setString(1, "Hi");<br />for (int i = 0; i &lt; 10; i++) {<br />　pstmt.setInt(2, i);<br />　int rowCount = pstmt.executeUpdate();<br />}</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="2">　　3、IN 参数中数据类型的一致性<br /><br />　　setXXX 方法中的 XXX 是 Java 类型。它是一种隐含的 JDBC 类型（一般 SQL 类型），因为驱动程序将把 Java 类型映射为相应的 JDBC 类型（遵循该 JDBCGuide中§8.6.2 “映射 Java 和 JDBC 类型”表中所指定的映射），并将该 JDBC 类型发送给数据库。例如，以下代码段将 PreparedStatement 对象 pstmt 的第二个参数设置为 44，Java 类型为 short：<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1">
				<tbody>
						<tr>
								<td>
										<font size="2">pstmt.setShort(2, 44);</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="2">　　驱动程序将 44 作为 JDBC SMALLINT 发送给数据库，它是 Java short 类型的标准映射。<br /><br />　　程序员的责任是确保将每个 IN 参数的 Java 类型映射为与数据库所需的 JDBC 数据类型兼容的 JDBC 类型。不妨考虑数据库需要 JDBC SMALLINT 的情况。如果使用方法 setByte ，则驱动程序将 JDBC TINYINT 发送给数据库。这是可行的，因为许多数据库可从一种相关的类型转换为另一种类型，并且通常 TINYINT 可用于SMALLINT 适用的任何地方</font>
<img src ="http://www.blogjava.net/yanpeng/aggbug/85600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanpeng/" target="_blank">宝贝小猪唛</a> 2006-12-05 16:04 <a href="http://www.blogjava.net/yanpeng/articles/85600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdbc性能优化</title><link>http://www.blogjava.net/yanpeng/articles/84840.html</link><dc:creator>宝贝小猪唛</dc:creator><author>宝贝小猪唛</author><pubDate>Fri, 01 Dec 2006 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/yanpeng/articles/84840.html</guid><wfw:comment>http://www.blogjava.net/yanpeng/comments/84840.html</wfw:comment><comments>http://www.blogjava.net/yanpeng/articles/84840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanpeng/comments/commentRss/84840.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanpeng/services/trackbacks/84840.html</trackback:ping><description><![CDATA[
		<font face="Arial" color="#808080" size="2">jdbc程序的性能主要由两个因素决定,一是数据库本身的性质,另一个是与数据库相对独立的jdbc应用程序接口(api)的使用.<br />这里说的是如何正确使用jdbc编程接口,以获得更好的性能.<br />  jdbc主要优化有:<br />     1.选择正确的jdbc驱动程序<br />     2.Connention的优化  使用连接池来管理Connection对象<br />     3.Statement的优化   使用批量更新等<br />     4.Result的优化  正确的从数据库中get数据等<br />     <br />     (1)选择正确的jdbc驱动程序:<br />            1 jdbc-odbc 桥<br />            2 本地api-部分 java驱动<br />            3 jdbc网路协议-纯java驱动<br />            4 jdbc本地协议<br />        最好选择 jdbc网路协议-纯java驱动  效率比较高  但需要第三方软件的支持 比如corba  weblogic属于这种类型<br />    <br />     (2)优化Connection对象:<br />         1.设置适当的参数  DriverManager.getConnection(String url,Properties props);<br />                 例如:     Properties props=<b>new</b> Properties();<br />                              props.put("user","wuwei");<br />                              props.put("password","wuwei");<br />                              props.put("defaultRowPrefectch","30");<br />                              props.put("dufaultBatchValue","5");<br />                              Connection con=DriverManager.getConnection("jdbc:oracle:thin:@hostsString",props);<br />             对象可以通过设置setDefaultRowPrefetch(<b>int</b>) 和 setDefaultBatchValue(<b>int</b>) 两个参数类优化连接<br /> <br />          2.使用连接池  可以自己写一个连接池 这样程序的灵活性强,便于移植.<br />             apache项目开发了一套非常通用而表现非常稳定的对象池 http://jakarta.apache.org/commons/pool.htm<br />             设计了自己的连接池后 在客户端调用建立对象<br />                           <b>public</b> Object makeObject() <b>throws</b> Exception{<br />                                     Class.forName("oracle.jdbc.driver.OracalDriver");<br />                                     <b>return</b> DriverManager.getConnection("url","username","password");<br />                                     }<br />             销毁对象时用<br />                           <b>public</b><b>void</b> destroyObject(Object obj) <b>throws</b> Exception{<br />                                       ((Connection)obj.close());<br />                                       }<br />              注意几点 对象池里有没有回收机制,对象池里有机有容量限制,对象池里有多少个闲置对象(可以释放)        <br />  <br />           3.控制事务的提交  最好手动提交事务,不但可以可以保证数据原子性,而且对新能提高留下余地.<br />                   <b>try</b>{<br />                        connection.setAutoCommint(<b>false</b>);<br />                        // 代码 用PreparedStatement  性能比Statementh好.<br /> <br />                        connection.commit();<br />                        connection.setAutoCommit(<b>true</b>);<br />                          }<br />                   <b>catch</b>(SQLException e){<br />                   }<br />                   <b>finally</b>{<br />                           //代码<br />                           <b>if</b>(connection!=<b>null</b>){<br />                           connection.close();  <br />                           }<br /> <br /> <br />            4.适当的选择事务的隔离级别   <br />                                     TRANSACTION_READ_UNCOMMITED  性能最高<br />                                     TRANSACTION_READ_COMMITED    快<br />                                     TRANSACTION_REFEATABLE_READ  中等<br />                                     RANSACTION_SERIALIZABLE      慢<br /><br />   (3)Statement 优化<br />      jdbc3个接口用来处理sql的执行,是Statement PreparedStatement CallableStatement<br />          提供适当的Statement接口 <br />          批量执行sql<br />          从数据库批量获取数据<br />      PreparedStatement 比Statement性能要好 主要体现在一个sql语句多次重复执行的情况<br />      PreparedStatemnt只编译解析一次而Statement每次编译一次.<br />      <br />      批量修改数据库   <br />          Statement 提供了方法addBatch(String)和executeBatch()<br />          调用方法为stmt.addBatch("isnert....."); stmt.addBatch("update.....")<br />                          stmt.executeBatch();<br />          也可以用PreparedStatement从而更好的提高性能.<br />                pstmt=conn.preparedStatement("insert into test_table(......) values(....?)");<br />                pstmt.setString(1,"aaa");<br />                pstmt.addBatch();<br />                pstmt.setString(1,"bbb");<br />                pstmt.addBatch();<br />                .....<br />                pstmt.executeBatch();<br /><br />      批量地从数据库中取数据.<br />          通过setFetchSize()和getFectchSize()方法来设定和查看这个参数.这个参数对体统的性能影响比较大.<br />          这个参数太小会严重地降低程序地性能.<br />          Connection Statement ResultSet都有这个参数,他们对性能地影响顺序是:<br />             ResultSet---------Statement---------Connection<br />  (4)优化ResultSet.<br />     体现在以下几个方面<br />        批量读取数据.合理设置ResultSet的getFetchSize()和setFetchSize()方法中的参数<br />        使用正确的get和set方法<br />             使用整数而不是字段名作为参数性能比较高,<br />             例如 setInt(1,100);<br />                  setString(2,"aaaa");<br />               比 setInt("id","100");<br />                  setString("name","aaaa");<br />               性能好<br />        设置适当的滚动方向.有3个方向FETCH_FORWORD,FETCH_REVERSE FETCH_UNKNOWN<br />             单向滚动性能比较高.<br />  其他方面的性能优化<br />      及时显示的关闭Connection Statement ResultSet<br />          其中Connection可以用Connetion Pool处理.<br />      使用数据库系统的强大查询功能去组织数据.这样程序运行是和数据库服务的交互次数少,数据库返回给<br />      程序的记录条数少的多,所以性能有很大的提高.<br /></font>
<img src ="http://www.blogjava.net/yanpeng/aggbug/84840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanpeng/" target="_blank">宝贝小猪唛</a> 2006-12-01 14:56 <a href="http://www.blogjava.net/yanpeng/articles/84840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>连接方式</title><link>http://www.blogjava.net/yanpeng/articles/84836.html</link><dc:creator>宝贝小猪唛</dc:creator><author>宝贝小猪唛</author><pubDate>Fri, 01 Dec 2006 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/yanpeng/articles/84836.html</guid><wfw:comment>http://www.blogjava.net/yanpeng/comments/84836.html</wfw:comment><comments>http://www.blogjava.net/yanpeng/articles/84836.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanpeng/comments/commentRss/84836.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanpeng/services/trackbacks/84836.html</trackback:ping><description><![CDATA[
		<font color="#00ccff">连接Oracle数据库<br />  获得Oracle的驱动程序包classes12.jar<br />  把Oracle的驱动程序到\WEB-INF\lib下<br />  Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();<br />  Connection conn= DriverManager.getConnection（"jdbc:oracle:thin:@localhost:1521:数据库"，"用户名"，"密码"）;</font>
		<br />
		<br />
		<font color="#ff66ff">连接MYSQL数据库<br />  获得MySQL的驱动程序包mysql-connector-java-3.0.15-ga-bin（mysqldriver.jar）<br />  拷贝到\WEB-INF\lib下<br />  Class.forName("org.gjt.mm.mysql.Driver").newInstance();<br />  Connection conn= DriverManager.getConnection（"jdbc:mysql://localhost/testDB"，"用户名"，"密码"  ）;</font>
		<br />
		<br />
		<font color="#0066ff">连接Sql 2000数据库<br />  获得SQL直接的驱动程序包msbase.jar和mssqlserver.jar和msutil.jar<br />  把驱动程序包放到\WEB-INF\lib下<br />  Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();<br />  Connection conn= DriverManager.getConnection（    "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库""，"用户名"，"密码"）;</font>
		<br />
		<br />
		<font color="#ff9900">桥连<br />  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();;<br />Connection con=DriverManager.getConnection("jdbc:odbc:odbc名","用户名","密码");</font>
		<br />
		<br />
		<font color="#009999">记录集（涉及到什么时候关闭连接的头疼问题，常用的如LIST等对象）<br />  1、Statement stat=con.prepareStatement("select * from Login where id=?");<br />   stat.setString(1,textPinNo.getText());<br />  ResultSet result=stat.executeQuery();<br />  注：("select * from Login where(?,?,?,?,?)")应该与数据库对应<br />  2、Statement stat=con.prepareStatement("select * from Login where id="+变量);<br />  ResultSet result=stat.executeQuery();<br />  如果是非查询语句，则int i=stat.executeUpdate();<br />（注：驱动后的“.newInstance()”可以不加。声明、记录集最基本的是statement、ResultSet）<br /></font>
		<br />
		<br />
<img src ="http://www.blogjava.net/yanpeng/aggbug/84836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanpeng/" target="_blank">宝贝小猪唛</a> 2006-12-01 14:48 <a href="http://www.blogjava.net/yanpeng/articles/84836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC连接SqlServer2005数据库</title><link>http://www.blogjava.net/yanpeng/articles/84831.html</link><dc:creator>宝贝小猪唛</dc:creator><author>宝贝小猪唛</author><pubDate>Fri, 01 Dec 2006 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/yanpeng/articles/84831.html</guid><wfw:comment>http://www.blogjava.net/yanpeng/comments/84831.html</wfw:comment><comments>http://www.blogjava.net/yanpeng/articles/84831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanpeng/comments/commentRss/84831.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanpeng/services/trackbacks/84831.html</trackback:ping><description><![CDATA[
		<p align="left">
				<span>
						<font color="#00ccff">一、下载安装</font>
				</span>
				<span>
						<br />1</span>
				<span>、</span>
				<span>SqlServer 2005 Express Edition<br />   </span>
				<span>下载：</span>
				<span>
						<a href="http://msdn.microsoft.com/vstudio/express/sql/download/">
								<span>http://msdn.microsoft.com/vstudio/express/sql/download/</span>
						</a>
						<br />   </span>
				<span>安装完数据库后设置</span>
				<span>ICP/IP</span>
				<span>协议启动，具体如下：</span>
				<span>
						<br />   </span>
				<span>（</span>
				<span>1</span>
				<span>）打开</span>
				<span>SQL Server Configuration Manager<br />   </span>
				<span>（</span>
				<span>2</span>
				<span>）转到</span>
				<span>SQL Server 2005 Network Configuration-&gt;Protocols for SQLEXPRESS<br />   </span>
				<span>（</span>
				<span>3</span>
				<span>）将</span>
				<span>TCP/IP</span>
				<span>设置为</span>
				<span>Enabled</span>
				<span>（启用）</span>
				<span>
						<br />   </span>
				<span>（</span>
				<span>4</span>
				<span>）双击</span>
				<span>TCP/IP</span>
				<span>项，转到</span>
				<span>IP Addresses</span>
				<span>页</span>
				<span>
						<br />   </span>
				<span>（</span>
				<span>5</span>
				<span>）</span>
				<span>IP All</span>
				<span>中设置</span>
				<span>TCP Port</span>
				<span>为</span>
				<span>1433<br />   </span>
				<span>（</span>
				<span>6</span>
				<span>）重新启动服务</span>
				<span>
						<br />2</span>
				<span>、</span>
				<span>SqlServer2005</span>
				<span>数据库</span>
				<span>JDBC</span>
				<span>驱动</span>
				<span>
						<br />   </span>
				<span>下载：</span>
				<span>
						<a href="http://download.microsoft.com/download/d/2/e/d2e1ffb6-2cfa-4a62-a22d-a413cce93118/Download_SQL_JDBC_Driver.htm">
								<span>http://download.microsoft.com/download/d/2/e/d2e1ffb6-2cfa-4a62-a22d-a413cce93118/Download_SQL_JDBC_Driver.htm</span>
						</a>
						<br />   </span>
				<span>安装或者解压，取得</span>
				<span>sqljdbc.jar</span>
				<span>文件，该文件即为</span>
				<span>JDBC</span>
				<span>驱动。将</span>
				<span>sqljdbc.jar</span>
				<span>放到</span>
				<span>classpath</span>
				<span>。（</span>
				<span>web application</span>
				<span>中放在</span>
				<span>WEB-INF/lib</span>
				<span>下）</span>
		</p>
		<p align="left">
				<font color="#00ccff">
						<span>二、连接数据库</span>
						<span>SqlServer2005</span>
						<span>的</span>
						<span>java</span>
						<span>代码</span>
				</font>
				<span>
						<br />1</span>
				<span>、在</span>
				<span>tempdb</span>
				<span>中创建测试数据表格</span>
				<span>
						<br />use tempdb<br />CREATE TABLE dbo.Table_1<br />(<br /> ID bigint NOT NULL,<br /> NAME varchar(20) NOT NULL,<br /> EMAIL varchar(50) NULL<br />)  ON [PRIMARY]</span>
		</p>
		<p align="left">
				<span>2</span>
				<span>、测试使用数据库连接</span>
				<span>
						<br />   </span>
				<span>下面代码创建了一个连接到数据库的连接，及使用连接操作数据库。</span>
				<span>
						<br />/*<br /> * </span>
				<span>创建日期</span>
				<span> 2006-6-1<br /> */<br />package cn.afss.common.web.test;</span>
		</p>
		<p align="left">
				<span>import java.sql.Connection;<br />import java.sql.DriverManager;<br />import java.sql.ResultSet;<br />import java.sql.SQLException;<br />import java.sql.Statement;</span>
		</p>
		<p align="left">
				<span>import org.apache.log4j.Logger;</span>
		</p>
		<p align="left">
				<span>/**<br /> * @author Amei<br /> * Amei's FreeSky Studio<br /> */<br />public class TestConnSql2k5Bean {<br /> /**<br />  * Log4J Logger for this class<br />  */<br /> private static final Logger logger =<br />  Logger.getLogger(TestConnSql2k5Bean.class);<br /> private Connection conn = null;</span>
		</p>
		<p align="left">
				<span> public TestConnSql2k5Bean() {<br />  super();<br /> }</span>
		</p>
		<p align="left">
				<span> public void getConnection() {<br />  try {<br />   Class<br />    .forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")<br />    .newInstance();<br />   String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=tempdb";<br />   String USER = "sa"; // </span>
				<span>根据你自己设置的数据库连接用户进行设置</span>
				<span>
						<br />   String PASSWORD = "sa"; // </span>
				<span>根据你自己设置的数据库连接密码进行设置</span>
				<span>
						<br />   conn = DriverManager.getConnection(URL, USER, PASSWORD);<br />  } catch (java.lang.ClassNotFoundException ce) {<br />   logger.error("Get Connection error:", ce);<br />  } catch (java.sql.SQLException se) {<br />   logger.error("Get Connection error:", se);<br />  } catch (Exception e) {<br />   logger.error("Get Connection error:", e);<br />  }<br /> }</span>
		</p>
		<p align="left">
				<span> public void testConnection() {<br />  if (conn == null)<br />   this.getConnection();<br />  try {<br />   String sql = "SELECT * FROM TABLE_1";<br />   Statement stmt = conn.createStatement();<br />   ResultSet rs = stmt.executeQuery(sql);<br />   while (rs.next()) {<br />    logger.debug(rs.getString("ID"));<br />    logger.debug(rs.getString("NAME"));<br />    logger.debug(rs.getString("EMAIL"));<br />   }<br />   rs.close();<br />   stmt.close();<br />  } catch (SQLException e) {<br />   logger.error(e.getMessage(), e);<br />  } finally {<br />   if (conn != null)<br />    try {<br />     conn.close();<br />    } catch (SQLException e) {<br />    }<br />  }<br /> }<br /> public static void main(String[] args) {<br />  TestConnSql2k5Bean bean = new TestConnSql2k5Bean();<br />  bean.testConnection();<br /> }<br />}</span>
		</p>
		<p align="left">
				<font color="#00ccff">
						<span>三、</span>
						<span>Sql Server2000</span>
						<span>和</span>
						<span>2005</span>
						<span>的连接代码区别</span>
				</font>
				<span>
						<br />   </span>
				<span>写连接代码时需要注意</span>
				<span>2000</span>
				<span>和</span>
				<span>2005</span>
				<span>的不同：</span>
				<span>
						<br />1</span>
				<span>、连接</span>
				<span>SqlServer2000<br />  Class.forName("com.microsoft.<font color="#ff0000">jdbc.sqlserver</font>.SQLServerDriver").newInstance();<br />  URL = "<font color="#ff0000">jdbc:microsoft:sqlserver</font>://localhost:1433;DatabaseName=tempdb";<br />2</span>
				<span>、连接</span>
				<span>SqlServer2005<br />  Class.forName("com.microsoft.<font color="#ff0000">sqlserver.jdbc</font>.SQLServerDriver").newInstance();<br />  URL = "<font color="#ff0000">jdbc:sqlserver:</font>//localhost:1433;DatabaseName=tempdb";</span>
		</p>
<img src ="http://www.blogjava.net/yanpeng/aggbug/84831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanpeng/" target="_blank">宝贝小猪唛</a> 2006-12-01 14:40 <a href="http://www.blogjava.net/yanpeng/articles/84831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC常用类和方法</title><link>http://www.blogjava.net/yanpeng/articles/84825.html</link><dc:creator>宝贝小猪唛</dc:creator><author>宝贝小猪唛</author><pubDate>Fri, 01 Dec 2006 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/yanpeng/articles/84825.html</guid><wfw:comment>http://www.blogjava.net/yanpeng/comments/84825.html</wfw:comment><comments>http://www.blogjava.net/yanpeng/articles/84825.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanpeng/comments/commentRss/84825.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanpeng/services/trackbacks/84825.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#ff1493">一、四种驱动程序概念 <br /></font>
		</strong>
		<br />A、JDBC-ODBC Bridge <br />    桥接器型的驱动程序，这类驱动程序的特色是必须在使用者端的计算机上事先安装好ODBC驱动程序，然后通过JDBC-ODBC的调用方法，进而通过ODBC来存取数据库。 <br />    作为JDK1.1后的一部分，是sun.jdbc.odbc包的一部分 <br />Application---&gt;JDBC-ODBC  Bridge----&gt;JDBC-ODBC  Library---&gt;ODBC  Driver--&gt;Database <br />适用于快速的原型系统，没有提供JDBC驱动的数据库如Access <br /><br />B、JDBC-Native API Bridge <br />    也是桥接器驱动程序之一，这类驱动程序也必须先在使用者计算机上先安装好特定的驱动程序（类似ODBC），然后通过JDBC-Native API桥接器的转换，把Java API调用转换成特定驱动程序的调用方法，进而存取数据库。 <br />    利用开发商提供的本地库来直接与数据库通信。 <br />Application---&gt;JDBC  Driver----&gt;Native  Database  library----&gt;Database <br />比A类性能略好。 <br /><br />C、JDBC-middleware <br />    这类型的驱动程序最大的好处就是省去了在使用者计算机上安装任何驱动程序的麻烦，只需在服务器端安装好middleware，而middleware会负责所有存取数据库必要的转换。 <br />    Application---&gt;Jdbc  Driver-----&gt;java  middleware---&gt;JDBC  Driver----&gt;Database <br />具有最大的灵活性，通常由那些非数据库厂商提供，是四种类型中最小的。 <br /><br />D、Pure JDBC driver <br />    这类型的驱动程序是最成熟的JDBC驱动程序，不但无需在使用者计算机上安装任何额外的驱动程序，也不需要在服务器端安装任何中介程序(middleware)，所有存取数据库的操作，都直接由驱动程序来完成。 <br />    Application---&gt;Jdbc  driver-----&gt;database  engine---&gt;database <br />最高的性能，通过自己的本地协议直接与数据库引擎通信，具备在Internet装配的能力。 <br /><br /><br /><font color="#ff1493"><strong>二、常用的JDBC类与方法</strong></font> <br /><br />1、DriverManager类： <br />    负责管理JDBC驱动程序。使用JDBC驱动程序之前，必须先将驱动程序加载并向DriverManager注册后才可以使用，同时提供方法来建立与数据库的连接。 <br /><br />方法： <br />A、Class.forName(String driver); //加载注册驱动程序 <br />B、Static Connection getConnection(String url,String user,String password) throws SQLException;  <br />        //取得对数据库的连接 <br />C、Static Driver getDriver(String url) throws SQLExcetion; <br />        //在已经向DriverManager注册的驱动程序中寻找一个能够打开url所指定的数据库的驱动程序 <br /><br /><br />2、Connection类 <br />    负责维护JSP/JAVA数据库程序和数据库之间的联机。可以建立三个非常有用的类对象。 <br /><br />方法： <br />A、Statement createStatement() throws SQLException; //建立Statement类对象 <br />   Statement createStatement(int resultSetType,int resultSetConcurrency) throws SQLException;   <br />        // 建立Statement类对象 <br /><br />resultSetType值  <br />TYPE_FORWARD_ONLY 结果集不可滚动  <br />TYPE_SCROLL_INSENSITIVE 结果集可滚动，不反映数据库的变化  <br />TYPE_SCROLL_SENSITIVE 结果集可滚动，反映数据库的变化  <br /><br />resultSetConcurrency值  <br />CONCUR_READ_ONLY 不能用结果集更新数据  <br />CONCUR_UPDATABLE 能用结果集更新数据  <br /><br />JDBC2.0中才支持滚动的结果集，而且可以对数据进行更新 <br /><br />B、DatabaseMetaData getMetaData() throws SQLException; //建立DatabaseMetaData类对象 <br />C、PreparedStatement prepareStatement(String sql) throws SQLException;  <br />        //建立PreparedStatement类对象 <br />D、boolean getAutoCommit() throws SQLException //返回Connection类对象的AutoCommit状态 <br />E、void setAutoCommit(boolean autoCommit) throws SQLException  <br />        //设定Connection类对象的AutoCommit状态 <br />F、void commit() throws SQLException  //确定执行对数据库新增、删除或修改记录的操作 <br />G、void rollback() throws SQLException  //取消执行对数据库新增、删除或修改记录的操作 <br />H、void close() throws SQLException  //结束Connection对象对数据库的联机 <br />I、boolean isClosed() throws SQLException //测试是否已经关闭Connection类对象对数据库的联机 <br /><br />3、Statement类 <br /><br />    通过Statement类所提供的方法，可以利用标准的SQL命令，对数据库直接新增、删除或修改操作 <br /><br />方法： <br /><br />A、ResultSet executeQuery(String sql) throws SQLException //使用SELECT命令对数据库进行查询 <br />B、int executeUpdate(String sql) throws SQLException  <br />        //使用INSERT\DELETE\UPDATE对数据库进行新增、删除和修改操作。 <br />C、void close() throws SQLException //结束Statement类对象对数据库的联机 <br /><br /><br />4、PreparedStatement类 <br /><br />    PreparedStatement类和Statement类的不同之处在于PreparedStatement类对象会将传入的SQL命令事先编好等待使用，当有单一的SQL指令比多次执行时，用PreparedStatement类会比Statement类有效率 <br /><br />方法： <br /><br />A、ResultSet executeQuery() throws SQLException //使用SELECT命令对数据库进行查询 <br />B、int executeUpdate() throws SQLException  <br />        //使用INSERT\DELETE\UPDATE对数据库进行新增、删除和修改操作。 <br />C、ResultSetMetaData getMetaData() throws SQLException <br />        //取得ResultSet类对象有关字段的相关信息 <br />D、void setInt(int parameterIndex,int x) throws SQLException <br />        //设定整数类型数值给PreparedStatement类对象的IN参数 <br />E、void setFloat(int parameterIndex,float x) throws SQLException <br />        //设定浮点数类型数值给PreparedStatement类对象的IN参数 <br />F、void setNull(int parameterIndex,int sqlType) throws SQLException <br />        //设定NULL类型数值给PreparedStatement类对象的IN参数 <br />G、void setString(int parameterIndex,String x) throws SQLException <br />        //设定字符串类型数值给PreparedStatement类对象的IN参数 <br />H、void setDate(int parameterIndex,Date x) throws SQLException <br />        //设定日期类型数值给PreparedStatement类对象的IN参数 <br />I、void setTime(int parameterIndex,Time x) throws SQLException <br />        //设定时间类型数值给PreparedStatement类对象的IN参数 <br /><br /><br />5、DatabaseMetaData类 <br /><br />    DatabaseMetaData类保存了数据库的所有特性，并且提供许多方法来取得这些信息。 <br /><br />方法： <br /><br />A、String getDatabaseProductName() throws SQLException //取得数据库名称 <br />B、String getDatabaseProductVersion() throws SQLException //取得数据库版本代号 <br />C、String getDriverName() throws SQLException //取得JDBC驱动程序的名称 <br />D、String getDriverVersion()  throws SQLException //取得JDBC驱动程序的版本代号 <br />E、String getURL() throws SQLException //取得连接数据库的JDBC URL <br />F、String getUserName() throws SQLException //取得登录数据库的使用者帐号 <br /><br />6、ResultSet类 <br /><br />    负责存储查询数据库的结果。并提供一系列的方法对数据库进行新增、删除和修改操作。也负责维护一个记录指针（Cursor），记录指针指向数据表中的某个记录，通过适当的移动记录指针，可以随心所欲的存取数据库，加强程序的效率。 <br /><br />方法： <br /><br />A、boolean absolute(int row) throws SQLException  //移动记录指针到指定的记录 <br />B、void beforeFirst() throws SQLException  //移动记录指针到第一笔记录之前 <br />C、void afterLast() throws SQLException  //移动记录指针到最后一笔记录之后 <br />D、boolean first() throws SQLException  //移动记录指针到第一笔记录 <br />E、boolean last() throws SQLException  //移动记录指针到最后一笔记录 <br />F、boolean next() throws SQLException  //移动记录指针到下一笔记录 <br />G、boolean previous() throws SQLException  //移动记录指针到上一笔记录 <br />H、void deleteRow() throws SQLException  //删除记录指针指向的记录 <br />I、void moveToInsertRow() throws SQLException  //移动记录指针以新增一笔记录 <br />J、void moveToCurrentRow() throws SQLException  //移动记录指针到被记忆的记录 <br />K、void insertRow() throws SQLException  //新增一笔记录到数据库中 <br />L、void updateRow() throws SQLException  //修改数据库中的一笔记录 <br />M、void update类型(int columnIndex,类型 x) throws SQLException  //修改指定字段的值 <br />N、int get类型(int columnIndex) throws SQLException  //取得指定字段的值 <br />O、ResultSetMetaData getMetaData() throws SQLException //取得ResultSetMetaData类对象 <br /><br />7、ResultSetMetaData类 <br /><br />    ResultSetMetaData类对象保存了所有ResultSet类对象中关于字段的信息，提供许多方法来取得这些信息。 <br /><br />方法： <br /><br />A、int getColumnCount() throws SQLException //取得ResultSet类对象的字段个数 <br />B、int getColumnDisplaySize() throws SQLException //取得ResultSet类对象的字段长度 <br />C、String getColumnName(int column) throws SQLException //取得ResultSet类对象的字段名称 <br />D、String getColumnTypeName(int column) throws SQLException //取得ResultSet类对象的字段类型名称 <br />E、String getTableName(int column) throws SQLException //取得ResultSet类对象的字段所属数据表的名称 <br />F、boolean isCaseSensitive(int column) throws SQLException //测试ResultSet类对象的字段是否区分大小写 <br />G、boolean isReadOnly(int column) throws SQLException //测试ResultSet类对象的字段是否为只读 <br /><img src ="http://www.blogjava.net/yanpeng/aggbug/84825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanpeng/" target="_blank">宝贝小猪唛</a> 2006-12-01 14:10 <a href="http://www.blogjava.net/yanpeng/articles/84825.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>