﻿<?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-拼搏的人生-文章分类-Web组件</title><link>http://www.blogjava.net/DuYang/category/10758.html</link><description>拼搏在繁华的都市</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 02:38:34 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 02:38:34 GMT</pubDate><ttl>60</ttl><item><title>JDBC2.0新特性</title><link>http://www.blogjava.net/DuYang/articles/45417.html</link><dc:creator>Dalston.Young</dc:creator><author>Dalston.Young</author><pubDate>Wed, 10 May 2006 04:25:00 GMT</pubDate><guid>http://www.blogjava.net/DuYang/articles/45417.html</guid><wfw:comment>http://www.blogjava.net/DuYang/comments/45417.html</wfw:comment><comments>http://www.blogjava.net/DuYang/articles/45417.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DuYang/comments/commentRss/45417.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DuYang/services/trackbacks/45417.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">JDBC 2.0比1.0有了一些不同,体现在四个比较明显的方面:</font>
		<br />1&gt;. ResutlSet对象中的Cursor能够自由上下移动<br />2&gt;. 能直接使用Java程序语言来更新DB表里的内容,而不需要额外写SQL语法<br />3&gt;. 可以一次传送许多SQL语句到DB执行----Batch<br />4&gt;. 新增2个数据类型(BLOB和CLOB)<br />   我们知道在JDBC 1.0时,只要用 connection.createStatement()就能取得Statement()对象.不过在2.0中多的createStatement()<br />多了两个参数值,需要我们自己来定义它.<br />public Statement createStatement(int resultSetType,<br />                                 int resultSetConcurrency)throws SQLException <br />   第一个参数resultSetType用来设定ResultSet对象中的光标是否可以自由上下移动,它的值有三种,TYPE_FORWARD_ONLY,TYPE_SCROLL_SENSITIVE,<br />TYPE_SCROLL_INSENSITIVE.若为TYPE_FORWARD_ONLY就表示和1.0一样只能用next()方法;然后后两者可以让Cursor随便的自由移动,不过,<br />它们两者最大的区别在于:当ResutlSet中的值有改变时,TYPE_SCROLL_SENSITIVE能取得修改后的值,而TYPE_SCROLL_INSENSITIVE则不能.<br />  第而个参数resultSetConcurrentcy,主要是设定ResultSet对象是只读(read-only)还是可以改变的(updateable),它可能的值有两种,<br />CONCUR_READ_ONLY或者是CONCUR_UPDATE.若设置为CONCUR_READ_ONLY,ResultSet对象和1.0一样;若为CONCUR_UPDATEABLE,那么就可以用<br />ResultSet对象执行数据库的修改,增加和移除功能.for example:<br />先看功能和1.0一样的写法:<br />Statement stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY,<br />                                   ResultSet.CONCUR_READ_ONLY);<br />RestultSet rs=stmt.executeQuery("select ename,empno from emp");<br />while(rs.next())<br />{<br />   String name=rs.getString("ename");<br />   int empno=rs.getInt("empno");<br />   System.out.println("name="+name+","+"number="+empno);<br />}<br />输出结果为:<br />name=feiyang,number=1190<br />name=jack,   number=1230<br />name=BillGates number=12<br />...........<br />再看看下面这个:<br />Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,<br />                                   ResultSet.CONCUR_READ_ONLY);<br />RestultSet rs=stmt.executeQuery("select ename,empno from emp");<br />rs.afterLast();<br />while(rs.previous())<br />{<br />   String name=rs.getString("ename");<br />   int empno=rs.getInt("empno");<br />   System.out.println("name="+name+","+"number="+empno);<br />}<br />输出结果为:<br />name=BillGates number=12<br />name=jack,   number=1230<br />name=feiyang,number=1190<br />.............<br />这和上面第一有点不同的是顺序颠倒了,这是因为我们使用了rs.afterLast()这个方法.其实2.0中还有很多方法,如下:<br />rs.absolute(-1); //表示cursor在最后一笔数据,即 rs.last()<br />rs.absolute(1);  //表示cursor在第一笔数据,即rs.first()<br />rs.absolute(n);  //表示cursor在第N笔数据<br />假使我们目前有1000笔数据，取得第997笔<br />rs.absolute(-4);<br />还有一个方法和absolute很相像,那就是relative(),<br />rs.absolute(5); //表示第五笔数据<br />......<br />rs.relative(-3);  //表示cursor目前在第二笔数据<br />.......<br />rs.relative(1);  //cursor目前在第三笔数据<br />看看怎么用ResultSet对象执行更新数据库动作<br />   要让ResultSet对象执行更新数据库的动作，首先在声明Statement对象时,参数必须设置为TYPE_SCROLL_SENSITIVE和<br />CUNCOR_UPDATEABLE.<br />Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,<br />                                  ResultSet.CONCUR_UPDATEABLE);<br />ResultSet rs=stmt.executeQuery("select ename,empno from emp);<br />rs.last();<br />rs.updateInt("empno",2230);<br />rs.cancelRowUpdates();<br />rs.updateInt("empno",1213);<br />rs.updateRow();<br />新增数据到数据库<br />Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,<br />                                  ResultSet.CONCUR_UPDATEABLE);<br />ResultSet rs=stmt.executeQuery("select * from emp);<br />rs.moveToInsertRow();<br />rs.updateInt("empno",2230);<br />rs.updateString("ename","feiyang");<br />rs.updateString("job","clerk");<br />rs.updateFloat("sal",123456.5);<br />rs.insertRow();<br />删除数据<br />Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,<br />                                  ResultSet.CONCUR_UPDATEABLE);<br />ResultSet rs=stmt.executeQuery("select * from emp);<br />rs.absolute(4);<br />rs.deleteRow();<br />依次执行多条SQL语句<br />Statement stmt=con.createStatment();<br />int[] rows;<br />stmt.addBatch("insert into emp values('feiyang','123456')");<br />stmt.addBatch("insert into offcie values('employee','Shanghai')");<br />rows=stmt.executeBatch();<br />当执行大量数据的时候为了数据的完整性,建议使用Transaction<br />eg:<br />con.setAutoCommit(false);<br />Statement stmt=con.createStatement();<br />int[] rows;<br />stmt.addBatch("1...........");<br />stmt.addBatch("2...........");<br />stmt.addBatch("3...........");<br />stmt.addBatch("4...........");<br />stmt.addBatch("5...........");<br />stmt.addBatch("6...........");<br />rows=stmt.executeBatch();<br />con.commit();<br />在JDBC2.0中新增加BLOB和CLOB两个数据类型<br />BOLB指的是二进制大型对象(Binary Large Object),CLOB指的是字符大型对象(Character Large Object).它们用来处理大型<br />的数据类型,他们分别代表大量的二进制数据和文字数据.<img src ="http://www.blogjava.net/DuYang/aggbug/45417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DuYang/" target="_blank">Dalston.Young</a> 2006-05-10 12:25 <a href="http://www.blogjava.net/DuYang/articles/45417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>