锘??xml version="1.0" encoding="utf-8" standalone="yes"?>韩国亚洲伊人久久综合影院,国产91精品一区二区麻豆亚洲 ,精品亚洲成A人在线观看青青http://www.tkk7.com/xixidabao/category/15376.htmlGROW WITH JAVAzh-cnFri, 24 Aug 2007 09:13:35 GMTFri, 24 Aug 2007 09:13:35 GMT60濡備綍鍦╫racle浣跨敤blob,clobhttp://www.tkk7.com/xixidabao/archive/2007/08/22/138584.htmlJAVA涔嬭礬JAVA涔嬭礬Wed, 22 Aug 2007 05:05:00 GMThttp://www.tkk7.com/xixidabao/archive/2007/08/22/138584.html杞?http://blog.tostudy.com.cn/blog/show_930.html 


涓.鍐欏叆BLOB

1.鍏堝湪blob涓彃鍏mpty_blob()
2.鑾峰緱瀵瑰垰鍒氭彃鍏ヨ褰曠殑寮曠敤
BLOB blob = (BLOB) rs.getBlob("浣犵殑blob瀛楁鍚嶇О");
3.鍐欏叆
OutputStream out = blob.getBinaryOutputStream();
out.write(ENCYPWD);//娉ㄦ剰榪欓噷
浜?璇誨嚭BLOB

1.blob  = rs.getBlob("浣犵殑blob瀛楁鍚嶇О");
2.
InputStream is = blob.getBinaryStream();
int length = (int) blob.length();
byte[] buffer = new byte[length];
is.read(buffer);
is.close();
3.浣犳湁浜唅s灝遍殢渚垮鐞嗕簡
姣斿璇磋緭鍑哄埌涓涓枃浠?br>FileOutputStream fo = new FileOutputStream(filename);//鏁版嵁鍒扮殑鏂囦歡鍚?br>fo.write(buffer);
fo.close();

鐜錛?br>Database: Oracle 9i
App Server: BEA Weblogic 8.14
琛ㄧ粨鏋勶細
CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), BLOBATTR Blob)
CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), CLOBATTR Clob)   JAVA鍙互閫氳繃JDBC錛屼篃鍙互閫氳繃JNDI璁塊棶騫舵搷浣滄暟鎹簱錛岃繖涓ょ鏂瑰紡鐨勫叿浣撴搷浣滃瓨鍦ㄧ潃涓浜涘樊寮傦紝鐢變簬閫氳繃App Server鐨勬暟鎹簱榪炴帴姹燡NDI鑾峰緱鐨勬暟鎹簱榪炴帴鎻愪緵鐨刯ava.sql.Blob鍜宩ava.sql.Clob瀹炵幇綾諱笌JDBC鏂瑰紡鎻愪緵鐨勪笉鍚岋紝鍥犳鍦ㄥ叆搴撴搷浣滅殑鏃跺欓渶瑕佸垎鍒寰咃紱鍑哄簱鎿嶄綔娌℃湁榪欑宸紓錛屽洜姝や笉鐢ㄥ崟鐙寰呫?
涓銆丅LOB鎿嶄綔
1銆佸叆搴?br>錛?錛塉DBC鏂瑰紡
    //閫氳繃JDBC鑾峰緱鏁版嵁搴撹繛鎺?br>    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test");
    con.setAutoCommit(false);
    Statement st = con.createStatement();
    //鎻掑叆涓涓┖瀵硅薄empty_blob()
    st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");
    //閿佸畾鏁版嵁琛岃繘琛屾洿鏂幫紝娉ㄦ剰“for update”璇彞
    ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");
    if (rs.next())
    {
        //寰楀埌java.sql.Blob瀵硅薄鍚庡己鍒惰漿鎹負oracle.sql.BLOB
        oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");
        OutputStream outStream = blob.getBinaryOutputStream();
        //data鏄紶鍏ョ殑byte鏁扮粍錛屽畾涔夛細byte[] data
        outStream.write(data, 0, data.length);
    }
    outStream.flush();
    outStream.close();
    con.commit();
    con.close(); 錛?錛塉NDI鏂瑰紡
    //閫氳繃JNDI鑾峰緱鏁版嵁搴撹繛鎺?br>    Context context = new InitialContext();
    ds = (DataSource) context.lookup("ORA_JNDI");
    Connection con = ds.getConnection();
    con.setAutoCommit(false);
    Statement st = con.createStatement();
    //鎻掑叆涓涓┖瀵硅薄empty_blob()
    st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");
    //閿佸畾鏁版嵁琛岃繘琛屾洿鏂幫紝娉ㄦ剰“for update”璇彞
    ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");
    if (rs.next())
    {
        //寰楀埌java.sql.Blob瀵硅薄鍚庡己鍒惰漿鎹負weblogic.jdbc.vendor.oracle.OracleThinBlob錛堜笉鍚岀殑App Server瀵瑰簲鐨勫彲鑳戒細涓嶅悓錛?br>        weblogic.jdbc.vendor.oracle.OracleThinBlob blob = (weblogic.jdbc.vendor.oracle.OracleThinBlob) rs.getBlob("BLOBATTR");
        OutputStream outStream = blob.getBinaryOutputStream();
        //data鏄紶鍏ョ殑byte鏁扮粍錛屽畾涔夛細byte[] data
        outStream.write(data, 0, data.length);
    }
    outStream.flush();
    outStream.close();
    con.commit();
    con.close(); 2銆佸嚭搴?br>    //鑾峰緱鏁版嵁搴撹繛鎺?br>    Connection con = ConnectionFactory.getConnection();
    con.setAutoCommit(false);
    Statement st = con.createStatement();
    //涓嶉渶瑕?#8220;for update”
    ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");
    if (rs.next())
    {
        java.sql.Blob blob = rs.getBlob("BLOBATTR");
        InputStream inStream = blob.getBinaryStream();
        //data鏄鍑哄茍闇瑕佽繑鍥炵殑鏁版嵁錛岀被鍨嬫槸byte[]
        data = new byte[input.available()];
        inStream.read(data);
        inStream.close();
    }
    inStream.close();
    con.commit();
    con.close();   浜屻丆LOB鎿嶄綔
1銆佸叆搴?br>錛?錛塉DBC鏂瑰紡
    //閫氳繃JDBC鑾峰緱鏁版嵁搴撹繛鎺?br>    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test");
    con.setAutoCommit(false);
    Statement st = con.createStatement();
    //鎻掑叆涓涓┖瀵硅薄empty_clob()
    st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");
    //閿佸畾鏁版嵁琛岃繘琛屾洿鏂幫紝娉ㄦ剰“for update”璇彞
    ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
    if (rs.next())
    {
        //寰楀埌java.sql.Clob瀵硅薄鍚庡己鍒惰漿鎹負oracle.sql.CLOB
        oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");
        Writer outStream = clob.getCharacterOutputStream();
        //data鏄紶鍏ョ殑瀛楃涓詫紝瀹氫箟錛歋tring data
        char[] c = data.toCharArray();
        outStream.write(c, 0, c.length);
    }
    outStream.flush();
    outStream.close();
    con.commit();
    con.close();
錛?錛塉NDI鏂瑰紡
    //閫氳繃JNDI鑾峰緱鏁版嵁搴撹繛鎺?br>    Context context = new InitialContext();
    ds = (DataSource) context.lookup("ORA_JNDI");
    Connection con = ds.getConnection();
    con.setAutoCommit(false);
    Statement st = con.createStatement();
    //鎻掑叆涓涓┖瀵硅薄empty_clob()
    st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");
    //閿佸畾鏁版嵁琛岃繘琛屾洿鏂幫紝娉ㄦ剰“for update”璇彞
    ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
    if (rs.next())
    {
        //寰楀埌java.sql.Clob瀵硅薄鍚庡己鍒惰漿鎹負weblogic.jdbc.vendor.oracle.OracleThinClob錛堜笉鍚岀殑App Server瀵瑰簲鐨勫彲鑳戒細涓嶅悓錛?br>        weblogic.jdbc.vendor.oracle.OracleThinClob clob = (weblogic.jdbc.vendor.oracle.OracleThinClob) rs.getClob("CLOBATTR");
        Writer outStream = clob.getCharacterOutputStream();
        //data鏄紶鍏ョ殑瀛楃涓詫紝瀹氫箟錛歋tring data
        char[] c = data.toCharArray();
        outStream.write(c, 0, c.length);
    }
    outStream.flush();
    outStream.close();
    con.commit();
    con.close(); 2銆佸嚭搴?br>    //鑾峰緱鏁版嵁搴撹繛鎺?br>    Connection con = ConnectionFactory.getConnection();
    con.setAutoCommit(false);
    Statement st = con.createStatement();
    //涓嶉渶瑕?#8220;for update”
    ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");
    if (rs.next())
    {
        java.sql.Clob clob = rs.getClob("CLOBATTR");
        Reader inStream = clob.getCharacterStream();
        char[] c = new char[(int) clob.length()];
        inStream.read(c);
        //data鏄鍑哄茍闇瑕佽繑鍥炵殑鏁版嵁錛岀被鍨嬫槸String
        data = new String(c);
        inStream.close();
    }
    inStream.close();
    con.commit();
    con.close();   闇瑕佹敞鎰忕殑鍦版柟錛?br>1銆乯ava.sql.Blob銆乷racle.sql.BLOB銆亀eblogic.jdbc.vendor.oracle.OracleThinBlob鍑犵綾誨瀷鐨勫尯鍒?br>2銆乯ava.sql.Clob銆乷racle.sql.CLOB銆亀eblogic.jdbc.vendor.oracle.OracleThinClob鍑犵綾誨瀷鐨勫尯鍒?/strong>

JAVA涔嬭礬 2007-08-22 13:05 鍙戣〃璇勮
]]>
Servlet寮鍙戜腑JDBC鐨勯珮綰у簲鐢?/title><link>http://www.tkk7.com/xixidabao/archive/2006/05/21/47390.html</link><dc:creator>JAVA涔嬭礬</dc:creator><author>JAVA涔嬭礬</author><pubDate>Sun, 21 May 2006 15:47:00 GMT</pubDate><guid>http://www.tkk7.com/xixidabao/archive/2006/05/21/47390.html</guid><description><![CDATA[ <b>榪炵粨鏁版嵁搴?/b> <br /> <br />銆銆<a class="bluekey" target="_blank">JDBC</a>浣跨敤鏁版嵁搴?a class="bluekey" target="_blank">URL</a>鏉ヨ鏄?a class="bluekey" target="_blank">鏁版嵁搴撻┍鍔ㄧ▼搴?/a>銆傛暟鎹簱URL綾諱技浜?a class="bluekey" target="_blank">閫氱敤</a>鐨刄RL錛屼絾SUN 鍦ㄥ畾涔夋椂浣滀簡涓鐐圭畝鍖栵紝鍏?a class="bluekey" target="_blank">璇硶</a>濡備笅錛?<br /><br />銆銆<a class="bluekey" target="_blank">Jdbc:</a>:[node]/[<a class="bluekey" target="_blank">database</a>] <br /><br />銆銆鍏朵腑瀛愬崗璁紙subprotocal錛夊畾涔?a class="bluekey" target="_blank">椹卞姩</a>紼嬪簭綾誨瀷錛宯ode鎻愪緵緗戠粶鏁版嵁搴撶殑浣嶇疆鍜岀鍙e彿錛屽悗闈㈣窡鍙夌殑鍙傛暟銆備緥濡傦細 <br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td><a class="bluekey" target="_blank">String</a> url=鈥漥dbc:inetdae:myser<a class="bluekey" target="_blank">ver:1</a>433<a class="bluekey" target="_blank">?l</a>anguage=us-<a class="bluekey" target="_blank">english</a>&sql7=<a class="bluekey" target="_blank">true</a>鈥?</td></tr></tbody></table><br />銆銆琛ㄧず閲囩敤inetdae椹卞姩紼嬪簭榪炴帴<a class="bluekey" target="_blank">1433</a>绔彛涓婄殑my<a class="bluekey" target="_blank">server鏁版嵁搴?/a>鏈嶅姟鍣紝閫夋嫨<a class="bluekey" target="_blank">璇█</a>涓虹編鍥借嫳璇紝鏁版嵁搴撶殑鐗堟湰鏄痬s<a class="bluekey" target="_blank">sql server</a> 7.0銆?<br /><br />銆銆<a class="bluekey" target="_blank">java</a>搴旂敤閫氳繃鎸囧畾DriverManager瑁呭叆涓涓┍鍔ㄧ▼搴忕被銆傝娉曞涓嬶細 <br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>Class.forName(鈥溾?;</td></tr></tbody></table><br />銆銆鎴?銆<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>Class.forName(鈥溾?.newInstance(); </td></tr></tbody></table><br />銆銆鐒跺悗錛孌riverManager鍒涘緩涓涓壒瀹氱殑榪炴帴錛?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td><a class="bluekey" target="_blank">Connection</a> connection=DriverManager.getConnection(url,<a class="bluekey" target="_blank">login</a>,<a class="bluekey" target="_blank">password</a>)錛?</td></tr></tbody></table><br />銆銆Connection<a class="bluekey" target="_blank">鎺ュ彛</a>閫氳繃鎸囧畾鏁版嵁搴撲綅緗紝鐧誨綍鍚嶅拰瀵嗙爜<a class="bluekey" target="_blank">榪炴帴鏁版嵁搴?/a>銆侰onnection鎺ュ彛鍒涘緩涓涓猄tatement瀹炰緥<a class="bluekey" target="_blank">鎵ц</a>闇瑕佺殑鏌ヨ錛?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>Statement stmt=connection.createStatement(); </td></tr></tbody></table><br />銆銆Statement鍏鋒湁鍚勭鏂規硶錛?a class="bluekey" target="_blank">API</a>錛夛紝濡俥xecuteQuery錛?a class="bluekey" target="_blank">execute</a>絳夊彲浠ヨ繑鍥炴煡璇㈢殑緇撴灉闆嗐傜粨鏋滈泦鏄竴涓?a class="bluekey" target="_blank">ResultSet</a>瀵硅薄銆傚叿浣撶殑鍙互閫氳繃jdbc寮鍙戞枃妗?a class="bluekey" target="_blank">鏌ョ湅</a>銆傚彲浠un鐨勭珯鐐逛笂涓嬭澆 <br /><br />銆銆涓嬮潰渚嬪瓙鏉ヨ鏄庯細 <br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td><a class="bluekey" target="_blank">import</a><a class="bluekey" target="_blank">java</a>.sql.*; // 杈撳叆JDBC <a class="bluekey" target="_blank">package</a><br /><br />String url = "jdbc:inetdae:myserver:1433";// <a class="bluekey" target="_blank">涓繪満鍚?/a>鍜岀鍙?<br />String login = "<a class="bluekey" target="_blank">user</a>";// 鐧誨綍鍚?<br />String password = "";// 瀵嗙爜 <br /><br />try { <br />銆銆DriverManager.setLogStream(System.out); <a class="bluekey" target="_blank">file</a>://涓烘樉紺轟竴浜涚殑淇℃伅鎵撳紑涓涓祦 <br />銆銆file://<a class="bluekey" target="_blank">璋冪敤</a>椹卞姩紼嬪簭錛屽叾鍚嶅瓧涓?a class="bluekey" target="_blank">com</a>.<a class="bluekey" target="_blank">inet</a>.tds.TdsDriver <br />銆銆file://Class.forName("<a class="bluekey" target="_blank">com</a>.<a class="bluekey" target="_blank">inet</a>.tds.TdsDriver")錛?<br />銆銆file://璁劇疆<a class="bluekey" target="_blank">瓚呮椂</a><br />銆銆DriverManager.setLoginTimeout(10); <br />銆銆file://鎵撳紑涓涓繛鎺?<br />銆銆Connection connection = DriverManager.getConnection(url,login,password); <br />銆銆file://寰楀埌鏁版嵁搴撻┍鍔ㄧ▼搴忕増鏈?<br /><br />銆銆銆DatabaseMetaData conMD = connection.getMetaData(); <br />銆銆銆System.out.println("<a class="bluekey" target="_blank">Driver</a><a class="bluekey" target="_blank">Name</a>:\t" + conMD.getDriverName()); <br />銆銆銆System.out.println("<a class="bluekey" target="_blank">Driver</a><a class="bluekey" target="_blank">Version</a>:\t" + conMD.getDriverVersion()); <br /><br />銆銆file://閫夋嫨鏁版嵁搴?<br />銆銆connection.setCatalog( "MyDatabase"); <br /><br />銆銆file://鍒涘緩Statement <br /><br />銆銆Statement <a class="bluekey" target="_blank">st</a> = connection.createStatement(); <br /><br />銆銆file://鎵ц鏌ヨ <br /><br />銆銆ResultSet rs = st.executeQuery("<a class="bluekey" target="_blank">SELECT</a> * FROM mytable"); <br /><br />銆銆file://鍙栧緱緇撴灉錛岃緭鍑哄埌灞忓箷 <br /><br />銆銆while (rs.next()){ <br />銆銆銆銆銆<a class="bluekey" target="_blank">for</a>(<a class="bluekey" target="_blank">int</a> j=1; j<=rs.getMetaData().getColumnCount(); j++){ <br />銆銆銆銆銆銆System.out.<a class="bluekey" target="_blank">print</a>( rs.getObject(j)+"\t"); <br />銆銆銆銆銆} <br />銆銆銆System.out.println(); <br />銆銆} <br /><br />銆銆file://鍏抽棴瀵硅薄 <br />銆銆st.close(); <br />銆銆銆銆connection.close(); <br />銆銆} catch(<a class="bluekey" target="_blank">Exception</a> e) { <br />銆銆銆銆e.printStackTrace(); <br />銆銆} </td></tr></tbody></table><br /><br /><br /><b>寤虹珛榪炵粨姹?/b><br /><br />銆銆涓涓姩鎬佺殑緗戠珯棰戠箒鍦頒粠鏁版嵁搴撲腑鍙栧緱鏁版嵁鏉ユ瀯鎴恏tml欏甸潰銆傛瘡涓嬈¤姹備竴涓〉闈㈤兘浼氬彂鐢熸暟鎹簱鎿嶄綔銆備絾榪炴帴鏁版嵁搴撳嵈鏄竴涓渶瑕佹秷鑰楀ぇ閲忔椂闂寸殑宸ヤ綔錛屽洜涓鴻姹傝繛鎺ラ渶瑕佸緩绔嬮氳錛屽垎閰嶈祫婧愶紝榪涜鏉冮檺璁よ瘉銆傝繖浜涘伐浣滃緢灝戣兘鍦ㄤ竴涓ょ鍐呭畬鎴愩傛墍浠ワ紝寤虹珛涓涓繛鎺ワ紝鐒跺悗鍐嶅悗緇殑鏌ヨ涓兘浣跨敤姝よ繛鎺ヤ細澶уぇ鍦版彁楂樻ц兘銆傚洜涓簊ervlet鍙互鍦ㄤ笉鍚岀殑璇鋒眰闂翠繚鎸佺姸鎬侊紝鍥犳閲囩敤鏁版嵁搴撹繛鎺ユ睜鏄竴涓洿鎺ョ殑瑙e喅鏂規銆?<br /><br />銆銆Servlet鍦ㄦ湇鍔″櫒鐨勮繘紼嬬┖闂翠腑椹葷暀錛屽彲浠ユ柟渚胯屾寔涔呭湴緇存姢鏁版嵁搴撹繛鎺ャ傛帴涓嬫潵錛屾垜浠粙緇嶄竴涓畬鏁寸殑榪炴帴姹犵殑瀹炵幇銆傚湪瀹炵幇涓紝鏈変竴涓繛鎺ユ睜綆$悊鍣ㄧ鐞嗚繛鎺ユ睜瀵硅薄錛屽叾涓瘡涓涓繛鎺ユ睜淇濇寔涓緇勬暟鎹簱榪炴帴瀵硅薄錛岃繖浜涘璞″彲涓轟換浣晄ervlet鎵浣跨敤銆?<br /><br />銆銆涓銆佹暟鎹簱榪炴帴姹犵被 DBConnectionPool,鎻愪緵濡備笅鐨勬柟娉曪細 <br /><br />銆銆1銆佷粠姹犱腑鍙栧緱涓涓墦寮鐨勮繛鎺ワ紱 <br /><br />銆銆2銆佸皢涓涓繛鎺ヨ繑鍥炴睜涓紱 <br /><br />銆銆3銆佸湪鍏抽棴鏃墮噴鏀炬墍鏈夌殑璧勬簮錛屽茍鍏抽棴鎵鏈夌殑榪炴帴銆?<br /><br />銆銆鍙﹀錛孌BConnectionPool榪樺鐞嗚繛鎺ュけ璐ワ紝姣斿瓚呮椂錛岄氳澶辮觸絳夐敊璇紝騫朵笖鏍規嵁棰勫畾涔夌殑鍙傛暟闄愬埗姹犱腑鐨勮繛鎺ユ暟銆?<br /><br />銆銆浜屻佺鐞嗚呯被錛孌BConnetionManager錛屾槸涓涓鍣ㄥ皢榪炴帴姹犲皝瑁呭湪鍐咃紝騫剁鐞嗘墍鏈夌殑榪炴帴姹犮傚畠鐨勬柟娉曟湁錛?<br /><br />銆銆1銆?璋冪敤鍜屾敞鍐屾墍鏈夌殑jdbc椹卞姩紼嬪簭錛?<br /><br />銆銆2銆?鏍規嵁鍙傛暟琛ㄥ垱寤篋BConnectionPool瀵硅薄錛?<br /><br />銆銆3銆?鏄犲皠榪炴帴姹犵殑鍚嶅瓧鍜孌BConnectionPool瀹炰緥錛?<br /><br />銆銆4銆?褰撴墍鏈夌殑榪炴帴瀹㈡埛閫鍑哄悗錛屽叧闂叏閮ㄨ繛鎺ユ睜銆?<br /><br />銆銆榪欎簺綾葷殑瀹炵幇錛屼互鍙婂浣曞湪servlet涓嬌鐢ㄨ繛鎺ユ睜鐨勫簲鐢ㄥ湪闅忓悗鐨勬枃绔犱腑璁茶В <br /><br />銆銆DBConnectionPool綾諱唬琛ㄤ竴涓敱url鏍囪瘑鐨勬暟鎹簱榪炴帴姹犮傚墠闈紝鎴戜滑宸茬粡鎻愬埌錛宩dbc鐨剈rl鐢變笁涓儴鍒嗙粍鎴愶細鍗忚鏍囪瘑錛堟繪槸jdbc錛?瀛愬崗璁爣璇嗭紙渚嬪錛宱dbc.oracle錛?鍜屾暟鎹簱鏍囪瘑錛堣窡鐗瑰畾鐨勬暟鎹簱鏈夊叧錛夈傝繛鎺ユ睜涔熷叿鏈変竴涓悕瀛楋紝渚涘鎴風▼搴忓紩鐢ㄣ傚彟澶栵紝榪炴帴姹犺繕鏈変竴涓敤鎴峰悕錛屼竴涓瘑鐮佸拰涓涓渶澶у厑璁歌繛鎺ユ暟銆傚鏋渨eb搴旂敤鍏佽鎵鏈夌殑鐢ㄦ埛浣跨敤鏌愪簺鏁版嵁搴撴搷浣滐紝鑰屽彟涓浜涙搷浣滄槸鏈夐檺鍒剁殑錛屽垯鍙互鍒涘緩涓や釜榪炴帴姹狅紝鍏鋒湁鍚屾牱鐨剈rl,涓嶅悓鐨剈ser name鍜宲assword錛屽垎鍒鐞嗕袱綾諱笉鍚岀殑鎿嶄綔鏉冮檺銆傜幇鎶奃BConnectionPool璇︾粏浠嬬粛濡備笅錛?<br /><br />銆銆涓夈丏BConnectionPool鐨勬瀯閫?<br /><br />銆銆鏋勯犲嚱鏁板彇寰椾笂榪扮殑鎵鏈夊弬鏁幫細 <br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>public DBConnectionPool(String name, String URL, String user, <br />String password, int maxConn) { <br />銆this.name = name; <br />銆this.URL = URL; <br />銆this.user = user; <br />銆this.password = password; <br />銆this.maxConn = maxConn; <br />} </td></tr></tbody></table><br />銆銆灝嗘墍鏈夌殑鍙傛暟淇濆瓨鍦ㄥ疄渚嬪彉閲忎腑銆?<br /><br />銆銆鍥涖佷粠姹犱腑鎵撳紑涓涓繛鎺?<br /><br />銆銆DBConnectionPool鎻愪緵涓ょ鏂規硶鏉ユ鏌ヨ繛鎺ャ備袱縐嶆柟娉曢兘榪斿洖涓涓彲鐢ㄧ殑榪炴帴錛屽鏋滄病鏈夊浣欑殑榪炴帴錛屽垯鍒涘緩涓涓柊鐨勮繛鎺ャ傚鏋滄渶澶ц繛鎺ユ暟宸茬粡杈懼埌錛岀涓涓柟娉曡繑鍥瀗ull錛岀浜屼釜鏂規硶鍒欑瓑寰呬竴涓繛鎺ヨ鍏朵粬榪涚▼閲婃斁銆?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>public synchronized Connection getConnection() { <br />銆Connection con = null; <br />銆if (freeConnections.size() > 0) { <br />銆銆// Pick the first Connection in the Vector <br />銆銆// to get round-robin usage <br />銆銆con = (Connection) freeConnections.firstElement(); <br />銆銆freeConnections.removeElementAt(0); <br />銆銆try { <br />銆銆銆if (con.isClosed()) { <br />銆銆銆銆log("Removed bad connection from " + name); <br />銆銆銆銆// Try again recursively <br />銆銆銆銆con = getConnection(); <br />銆銆銆} <br />銆銆} <br />銆銆catch (SQLException e) { <br />銆銆銆log("Removed bad connection from " + name); <br />銆銆銆// Try again recursively <br />銆銆銆con = getConnection(); <br />銆銆} <br />銆} <br />銆else if (maxConn == 0 || checkedOut < maxConn) { <br />銆銆con = newConnection(); <br />銆} <br />銆if (con != null) { <br />銆銆checkedOut++; <br />銆} <br />銆return con; <br />} </td></tr></tbody></table><br />銆銆鎵鏈夌┖闂茬殑榪炴帴瀵硅薄淇濆瓨鍦ㄤ竴涓彨freeConnections 鐨刅ector涓傚鏋滃瓨鍦ㄨ嚦灝戜竴涓┖闂茬殑榪炴帴錛実etConnection()榪斿洖鍏朵腑絎竴涓繛鎺ャ備笅闈紝灝嗕細鐪嬪埌錛岃繘紼嬮噴鏀劇殑榪炴帴榪斿洖鍒癴reeConnections鐨勬湯灝俱傝繖鏍鳳紝鏈澶ч檺搴﹀湴閬垮厤浜嗘暟鎹簱鍥犱竴涓繛鎺ヤ笉媧誨姩鑰屾剰澶栧皢鍏跺叧闂殑椋庨櫓銆?<br /><br />銆銆鍐嶈繑鍥炲鎴蜂箣鍓嶏紝isClosed()媯鏌ヨ繛鎺ユ槸鍚︽湁鏁堛傚鏋滆繛鎺ヨ鍏抽棴浜嗭紝鎴栬呬竴涓敊璇彂鐢燂紝璇ユ柟娉曢掑綊璋冪敤鍙栧緱鍙︿竴涓繛鎺ャ?<br /><br />銆銆濡傛灉娌℃湁鍙敤鐨勮繛鎺ワ紝璇ユ柟娉曟鏌ユ槸鍚︽渶澶ц繛鎺ユ暟琚緗負0琛ㄧず鏃犻檺榪炴帴鏁幫紝鎴栬呰揪鍒頒簡鏈澶ц繛鎺ユ暟銆傚鏋滃彲浠ュ垱寤烘柊鐨勮繛鎺ワ紝鍒欏垱寤轟竴涓柊鐨勮繛鎺ャ傚惁鍒欙紝榪斿洖null銆?<br /><br />銆銆鏂規硶newConnection()鐢ㄦ潵鍒涘緩涓涓柊鐨勮繛鎺ャ傝繖鏄竴涓鏈夋柟娉曪紝鍩轟簬鐢ㄦ埛鍚嶅拰瀵嗙爜鏉ョ‘瀹氭槸鍚﹀彲浠ュ垱寤烘柊鐨勮繛鎺ャ?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>private Connection newConnection() { <br />銆Connection con = null; <br />銆try { <br />銆銆if (user == null) { <br />銆銆 con = DriverManager.getConnection(URL); <br />銆銆} <br />銆銆else { <br />銆銆銆con = DriverManager.getConnection(URL, user, password); <br />銆銆} <br />銆銆log("Created a new connection in pool " + name); <br />銆} <br />銆catch (SQLException e) { <br />銆銆log(e, "Can not create a new connection for " + URL); <br />銆銆return null; <br />銆} <br />銆return con; <br />}</td></tr></tbody></table><br />銆銆jdbc鐨凞riverManager鎻愪緵涓緋誨垪鐨刧etConnection錛堬級鏂規硶錛屽彲浠ヤ嬌鐢╱rl鍜岀敤鎴峰悕錛屽瘑鐮佺瓑鍙傛暟鍒涘緩涓涓繛鎺ャ?<br /><br />銆銆絎簩涓猤etConnection()鏂規硶甯︽湁涓涓秴鏃跺弬鏁?timeout,褰撹鍙傛暟鎸囧畾鐨勬縐掓暟琛ㄧず瀹㈡埛鎰挎剰涓轟竴涓繛鎺ョ瓑寰呯殑鏃墮棿銆傝繖涓柟娉曡皟鐢ㄥ墠涓涓柟娉曘?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>public synchronized Connection getConnection(long timeout) { <br />銆long startTime = new Date().getTime(); <br />銆Connection con; <br />銆while ((con = getConnection()) == null) { <br />銆銆try { <br />銆銆銆wait(timeout); <br />銆銆} <br />銆銆catch (InterruptedException e) {} <br />銆銆if ((new Date().getTime() - startTime) >= timeout) { <br />銆銆銆// Timeout has expired <br />銆銆銆return null; <br />銆銆} <br />銆} <br />銆return con; <br />} </td></tr></tbody></table><br />銆銆灞閮ㄥ彉閲弒tartTime鍒濆鍖栧綋鍓嶇殑鏃墮棿銆備竴涓獁hile寰幆棣栧厛灝濊瘯鑾峰緱涓涓繛鎺ワ紝濡傛灉澶辮觸錛寃ait()鍑芥暟琚皟鐢ㄦ潵絳夊緟闇瑕佺殑鏃墮棿銆傚悗闈細鐪嬪埌錛學ait()鍑芥暟浼氬湪鍙︿竴涓繘紼嬭皟鐢╪otify()鎴栬卬otifyAll()鏃惰繑鍥烇紝鎴栬呯瓑鍒版椂闂存祦閫濆畬姣曘備負浜嗙‘瀹歸ait()鏄洜涓轟綍縐嶅師鍥犺繑鍥烇紝鎴戜滑鐢ㄥ紑濮嬫椂闂村噺鍘誨綋鍓嶆椂闂達紝媯鏌ユ槸鍚﹀ぇ浜巘imeout銆傚鏋滅粨鏋滃ぇ浜巘imeout,榪斿洖null,鍚﹀垯錛屽湪姝よ皟鐢╣etConnection()鍑芥暟銆?<br /><br />銆銆浜斻佸皢涓涓繛鎺ヨ繑鍥炴睜涓?<br /><br />銆銆DBConnectionPool綾諱腑鏈変竴涓猣reeConnection鏂規硶浠ヨ繑鍥炵殑榪炴帴浣滀負鍙傛暟錛屽皢榪炴帴榪斿洖榪炴帴姹犮?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>public synchronized void freeConnection(Connection con) { <br />銆// Put the connection at the end of the Vector <br />銆freeConnections.addElement(con); <br />銆checkedOut--; <br />銆notifyAll(); <br />} </td></tr></tbody></table><br />銆銆榪炴帴琚姞鍦╢reeConnections鍚戦噺鐨勬渶鍚庯紝鍗犵敤鐨勮繛鎺ユ暟鍑?錛岃皟鐢╪otifyAll()鍑芥暟閫氱煡鍏朵粬絳夊緟鐨勫鎴風幇鍦ㄦ湁浜嗕竴涓繛鎺ャ?<br /><br />銆銆鍏佸叧闂?<br /><br />銆銆澶у鏁皊ervlet寮曟搸鎻愪緵瀹屾暣鐨勫叧闂柟娉曘傛暟鎹簱榪炴帴姹犻渶瑕佸緱鍒伴氱煡浠ユ紜湴鍏抽棴鎵鏈夌殑榪炴帴銆侱BConnectionManager璐熻矗鍗忚皟鍏抽棴浜嬩歡錛屼絾榪炴帴鐢卞悇涓繛鎺ユ睜鑷繁璐熻矗鍏抽棴銆傛柟娉時elase()鐢盌BConnectionManager璋冪敤銆?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>public synchronized void release() { <br />銆Enumeration allConnections = freeConnections.elements(); <br />銆while (allConnections.hasMoreElements()) { <br />銆銆Connection con = (Connection) allConnections.nextElement(); <br />銆銆try { <br />銆銆銆con.close(); <br />銆銆銆log("Closed connection for pool " + name); <br />銆銆} <br />銆銆catch (SQLException e) { <br />銆銆銆log(e, "Can not close connection for pool " + name); <br />銆銆} <br />銆} <br />銆freeConnections.removeAllElements(); <br />} </td></tr></tbody></table><br />銆銆鏈柟娉曢亶鍘唂reeConnections鍚戦噺浠ュ叧闂墍鏈夌殑榪炴帴銆?<br /><br />銆銆DBConnetionManager鐨勬瀯閫犲嚱鏁版槸縐佹湁鍑芥暟錛屼互閬垮厤鍏朵粬綾誨垱寤哄叾瀹炰緥銆?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>private DBConnectionManager() { <br /><br />init(); <br /><br />} </td></tr></tbody></table><br />銆銆DBConnetionManager鐨勫鎴瘋皟鐢╣etInstance()鏂規硶鏉ュ緱鍒拌綾葷殑鍗曚竴瀹炰緥鐨勫紩鐢ㄣ?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>static synchronized public DBConnectionManager getInstance() { <br />if (instance == null) { <br />銆instance = new DBConnectionManager(); <br />} <br />clients++; <br />return instance; <br />} </td></tr></tbody></table><br /><br /><br /><b>榪炵粨姹犱嬌鐢ㄥ疄渚?/b><br /><br />銆銆鍗曚竴鐨勫疄渚嬪湪絎竴嬈¤皟鐢ㄦ椂鍒涘緩錛屼互鍚庣殑璋冪敤榪斿洖璇ュ疄渚嬬殑闈欐佸簲鐢ㄣ備竴涓鏁板櫒綰綍鎵鏈夌殑瀹㈡埛鏁幫紝鐩村埌瀹㈡埛閲婃斁寮曠敤銆傝繖涓鏁板櫒鍦ㄤ互鍚庣敤鏉ュ崗璋冨叧闂繛鎺ユ睜銆?<br /><br />銆銆涓銆佸垵濮嬪寲 <br /><br />銆銆鏋勯犲嚱鏁拌皟鐢ㄤ竴涓鏈夌殑init()鍑芥暟鍒濆鍖栧璞°?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>private void init() { <br />銆InputStream is = getClass().getResourceAsStream("/db.properties"); <br />銆Properties dbProps = new Properties(); <br />銆try { <br />銆銆dbProps.load(is); <br />銆} <br />銆catch (Exception e) { <br />銆銆System.err.println("Can not read the properties file. " + "Make sure db.properties is in the CLASSPATH"); <br />銆銆return; <br />銆} <br /><br />銆String logFile = dbProps.getProperty("logfile", <br />銆銆銆 "DBConnectionManager.log"); <br />銆try { <br />銆銆log = new PrintWriter(new FileWriter(logFile, true), true); <br />銆} <br />銆catch (IOException e) { <br />銆銆System.err.println("Can not open the log file: " + logFile); <br />銆銆log = new PrintWriter(System.err); <br />銆} <br />銆loadDrivers(dbProps); <br />銆createPools(dbProps); <br />} </td></tr></tbody></table><br />銆銆鏂規硶getResourceAsStream()鏄竴涓爣鍑嗘柟娉曪紝鐢ㄦ潵鎵撳紑涓涓閮ㄨ緭鍏ユ枃浠躲傛枃浠剁殑浣嶇疆鍙栧喅浜庣被鍔犺澆鍣紝鑰屾爣鍑嗙殑綾誨姞杞藉櫒浠巆lasspath寮濮嬫悳绱€侱b.properties鏂囦歡鏄竴涓狿orperties鏍煎紡鐨勬枃浠訛紝淇濆瓨鍦ㄨ繛鎺ユ睜涓畾涔夌殑key-value瀵廣備笅闈竴浜涘父鐢ㄧ殑灞炴у彲浠ュ畾涔夛細 <br /><br />銆銆銆drivers 浠ョ┖鏍煎垎寮鐨刯dbc椹卞姩紼嬪簭鐨勫垪琛?<br /><br />銆銆銆logfile 鏃ュ織鏂囦歡鐨勭粷瀵硅礬寰?<br /><br />銆銆姣忎釜榪炴帴姹犱腑榪樹嬌鐢ㄥ彟涓浜涘睘鎬с傝繖浜涘睘鎬т互榪炴帴姹犵殑鍚嶅瓧寮澶達細 <br /><br />銆銆銆.url鏁版嵁搴撶殑JDBC URL <br /><br />銆銆銆.maxconn鏈澶ц繛鎺ユ暟銆?琛ㄧず鏃犻檺銆?<br /><br />銆銆銆.user榪炴帴姹犵殑鐢ㄦ埛鍚?<br /><br />銆銆銆.password鐩稿叧鐨勫瘑鐮?<br /><br />銆銆url灞炴ф槸蹇呴』鐨勶紝鍏朵粬灞炴у彲閫夈傜敤鎴峰悕鍜屽瘑鐮佸繀欏誨拰鎵瀹氫箟鐨勬暟鎹簱鍖歸厤銆?<br /><br />銆銆涓嬮潰鏄痺indows騫沖彴涓嬬殑涓涓猟b.properties鏂囦歡鐨勪緥瀛愩傛湁涓涓狪nstantDB榪炴帴姹犲拰涓涓氳繃odbc榪炴帴鐨刟ccess鏁版嵁搴撶殑鏁版嵁婧愶紝鍚嶅瓧鍙玠emo銆?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>drivers=sun.jdbc.odbc.JdbcOdbcDriver jdbc.idbDriver <br /><br />logfile=D:\\user\\src\\java\\DBConnectionManager\\log.txt <br /><br />idb.url=jdbc:idb:c:\\local\\javawebserver1.1\\db\\db.prp <br /><br />idb.maxconn=2 <br /><br />access.url=jdbc:odbc:demo <br /><br />access.user=demo <br /><br />access.password=demopw </td></tr></tbody></table><br />銆銆娉ㄦ剰錛屽弽鏂滅嚎鍦╳indows騫沖彴涓嬪繀欏誨弻鍐欍?<br /><br />銆銆鍒濆鍖栨柟娉昳nit()鍒涘緩涓涓狿orperties瀵硅薄騫惰杞絛b.properties鏂囦歡錛岀劧鍚庤鍙栨棩蹇楁枃浠跺睘鎬с傚鏋滄棩蹇楁枃浠舵病鏈夊懡鍚嶏紝鍒欎嬌鐢ㄧ己鐪佺殑鍚嶅瓧DBConnectionManager.log鍦ㄥ綋鍓嶇洰褰曚笅鍒涘緩銆傚湪姝ゆ儏鍐典笅錛屼竴涓郴緇熼敊璇綰綍銆?<br /><br />銆銆鏂規硶loadDrivers()灝嗘寚瀹氱殑鎵鏈塲dbc椹卞姩紼嬪簭娉ㄥ唽錛岃杞姐?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>private void loadDrivers(Properties props) { <br />銆String driverClasses = props.getProperty("drivers"); <br />銆StringTokenizer st = new StringTokenizer(driverClasses); <br />銆while (st.hasMoreElements()) { <br />銆銆String driverClassName = st.nextToken().trim(); <br />銆銆try { <br />銆銆銆Driver driver = (Driver) <br />銆銆銆Class.forName(driverClassName).newInstance(); <br />銆銆銆DriverManager.registerDriver(driver); <br />銆銆銆drivers.addElement(driver); <br />銆銆銆log("Registered JDBC driver " + driverClassName); <br />銆銆} <br />銆銆catch (Exception e) { <br />銆銆銆log("Can not register JDBC driver: " + driverClassName + ", Exception: " + e); <br />銆銆} <br />銆} <br />} </td></tr></tbody></table><br />銆銆loadDrivers()浣跨敤StringTokenizer灝哾irvers灞炴у垎鎴愬崟鐙殑driver涓詫紝騫跺皢姣忎釜椹卞姩紼嬪簭瑁呭叆java铏氭嫙鏈恒傞┍鍔ㄧ▼搴忕殑瀹炰緥鍦↗DBC 鐨凞riverManager涓敞鍐岋紝騫跺姞鍏ヤ竴涓鏈夌殑鍚戦噺drivers涓傚悜閲廳rivers鐢ㄦ潵鍏抽棴鍜屾敞閿鎵鏈夌殑椹卞姩紼嬪簭銆?<br /><br />銆銆鐒跺悗錛孌BConnectionPool瀵硅薄鐢辯鏈夋柟娉昪reatePools()鍒涘緩銆?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>private void createPools(Properties props) { <br />銆Enumeration propNames = props.propertyNames(); <br />銆while (propNames.hasMoreElements()) { <br />銆銆String name = (String) propNames.nextElement(); <br />銆銆if (name.endsWith(".url")) { <br />銆銆銆String poolName = name.substring(0, name.lastIndexOf(".")); <br />銆銆銆String url = props.getProperty(poolName + ".url"); <br />銆銆銆if (url == null) { <br />銆銆銆銆log("No URL specified for " + poolName); <br />銆銆銆銆continue; <br />銆銆銆} <br />銆銆銆String user = props.getProperty(poolName + ".user"); <br />銆銆銆String password = props.getProperty(poolName + ".password"); <br />銆銆銆String maxconn = props.getProperty(poolName + ".maxconn", "0"); <br />銆銆銆int max; <br />銆銆銆try { <br />銆銆銆銆max = Integer.valueOf(maxconn).intValue(); <br />銆銆銆} <br />銆銆銆catch (NumberFormatException e) { <br />銆銆銆銆log("Invalid maxconn value " + maxconn + " for " + poolName); <br />銆銆銆銆max = 0; <br />銆銆銆} <br />銆銆銆DBConnectionPool pool = new DBConnectionPool(poolName, url, user, password, max); <br />銆銆銆pools.put(poolName, pool); <br />銆銆銆log("Initialized pool " + poolName); <br />銆銆} <br />銆} <br />} </td></tr></tbody></table><br />銆銆涓涓灇涓懼璞′繚瀛樻墍鏈夌殑灞炴у悕錛屽鏋滃睘鎬у悕甯︽湁.url緇撳熬錛屽垯琛ㄧず鏄竴涓繛鎺ユ睜瀵硅薄闇瑕佽瀹炰緥鍖栥傚垱寤虹殑榪炴帴姹犲璞′繚瀛樺湪涓涓狧ashtable瀹炰緥鍙橀噺涓傝繛鎺ユ睜鍚嶅瓧浣滀負绱㈠紩錛岃繛鎺ユ睜瀵硅薄浣滀負鍊箋?<br /><br />銆銆浜屻佸緱鍒板拰榪斿洖榪炴帴 <br /><br />銆銆DBConnectionManager鎻愪緵getConnection錛堬級鏂規硶鍜宖reeConnection鏂規硶錛岃繖浜涙柟娉曟湁瀹㈡埛紼嬪簭浣跨敤銆傛墍鏈夌殑鏂規硶浠ヨ繛鎺ユ睜鍚嶅瓧鎵鍙傛暟錛屽茍璋冪敤鐗瑰畾鐨勮繛鎺ユ睜瀵硅薄銆?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>public Connection getConnection(String name) { <br />銆DBConnectionPool pool = (DBConnectionPool) pools.get(name); <br />銆if (pool != null) { <br />銆銆return pool.getConnection(); <br />銆} <br />銆return null; <br />} <br /><br />public Connection getConnection(String name, long time) { <br />銆DBConnectionPool pool = (DBConnectionPool) pools.get(name); <br />銆if (pool != null) { <br />銆銆return pool.getConnection(time); <br />銆} <br />銆return null; <br />} <br /><br />public void freeConnection(String name, Connection con) { <br />銆DBConnectionPool pool = (DBConnectionPool) pools.get(name); <br />銆if (pool != null) { <br />銆銆pool.freeConnection(con); <br />銆} <br />} </td></tr></tbody></table><br />銆銆涓夈佸叧闂?<br /><br />銆銆鏈鍚庯紝鐢變竴涓猺elease錛堬級鏂規硶錛岀敤鏉ュ畬濂藉湴鍏抽棴榪炴帴姹犮傛瘡涓狣BConnectionManager瀹㈡埛蹇呴』璋冪敤getInstance()鏂規硶寮曠敤銆傛湁涓涓鏁板櫒璺熻釜瀹㈡埛鐨勬暟閲忋傛柟娉時elease()鍦ㄥ鎴峰叧闂椂璋冪敤錛屾妧鏈櫒鍑?銆傚綋鏈鍚庝竴涓鎴烽噴鏀撅紝DBConnectionManager鍏抽棴鎵鏈夌殑榪炴帴姹犮?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>public synchronized void release() { <br />銆// Wait until called by the last client <br />銆if (--clients != 0) { <br />銆銆return; <br />銆} <br /><br />銆Enumeration allPools = pools.elements(); <br />銆while (allPools.hasMoreElements()) { <br />銆銆DBConnectionPool pool = (DBConnectionPool) allPools.nextElement(); <br />銆銆pool.release(); <br />銆} <br /><br />銆Enumeration allDrivers = drivers.elements(); <br />銆while (allDrivers.hasMoreElements()) { <br />銆銆Driver driver = (Driver) allDrivers.nextElement(); <br />銆銆try { <br />銆銆銆DriverManager.deregisterDriver(driver); <br />銆銆銆log("Deregistered JDBC driver " + driver.getClass().getName()); <br />銆銆} <br />銆銆catch (SQLException e) { <br />銆銆銆log(e, "Can not deregister JDBC driver: " + driver.getClass().getName()); <br />銆銆} <br />銆} <br />} </td></tr></tbody></table><br />銆銆褰撴墍鏈夎繛鎺ユ睜鍏抽棴錛屾墍鏈塲dbc椹卞姩紼嬪簭涔熻娉ㄩ攢銆?<br /><br /><br /><b>榪炵粨姹犵殑浣滅敤</b><br /><br />銆銆鐜板湪鎴戜滑緇撳悎DBConnetionManager鍜孌BConnectionPool綾繪潵璁茶Вservlet涓繛鎺ユ睜鐨勪嬌鐢細 <br /><br />銆銆涓銆侀鍏堢畝鍗曚粙緇嶄竴涓婼ervlet鐨勭敓鍛藉懆鏈燂細 <br /><br />銆銆Servlet API瀹氫箟鐨剆ervlet鐢熷懡鍛ㄦ湡濡備笅錛?<br /><br />銆銆1銆?Servlet 琚垱寤虹劧鍚庡垵濮嬪寲錛坕nit()鏂規硶錛夈?<br /><br />銆銆2銆?涓?涓垨澶氫釜瀹㈡埛璋冪敤鎻愪緵鏈嶅姟錛坰ervice()鏂規硶錛夈?<br /><br />銆銆3銆?Servlet琚攢姣侊紝鍐呭瓨琚洖鏀訛紙destroy()鏂規硶錛夈?<br /><br />銆銆浜屻乻ervlet涓嬌鐢ㄨ繛鎺ユ睜鐨勫疄渚?<br /><br />銆銆浣跨敤榪炴帴姹犵殑servlet鏈変笁涓樁孌電殑鍏稿瀷琛ㄧ幇鏄細 <br /><br />銆銆1錛?鍦╥nit()涓紝璋冪敤DBConnectionManager.getInstance()鐒跺悗灝嗚繑鍥炵殑寮曠敤淇濆瓨鍦ㄥ疄渚嬪彉閲忎腑銆?<br /><br />銆銆2錛?鍦╯evice()涓紝璋冪敤getConnection()錛屾墽琛屼竴緋誨垪鏁版嵁搴撴搷浣滐紝鐒跺悗璋冪敤freeConnection()褰掕繕榪炴帴銆?<br /><br />銆銆3錛?鍦╠estroy()涓紝璋冪敤release()鏉ラ噴鏀炬墍鏈夌殑璧勬簮錛屽茍鍏抽棴鎵鏈夌殑榪炴帴銆?<br /><br />銆銆涓嬮潰鐨勪緥瀛愭紨紺哄浣曚嬌鐢ㄨ繛鎺ユ睜銆?<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>import java.io.*; <br />import java.sql.*; <br />import javax.servlet.*; <br />import javax.servlet.http.*; <br /><br />public class TestServlet extends HttpServlet { <br />銆private DBConnectionManager connMgr; <br /><br />銆public void init(ServletConfig conf) throws ServletException { <br />銆銆super.init(conf); <br />銆銆connMgr = DBConnectionManager.getInstance(); <br />銆} <br /><br />銆public void service(HttpServletRequest req, HttpServletResponse res) <br />銆throws IOException { <br />銆銆res.setContentType("text/html"); <br />銆銆PrintWriter out = res.getWriter(); <br />銆銆Connection con = connMgr.getConnection("idb"); <br />銆銆if (con == null) { <br />銆銆銆out.println("Cant get connection"); <br />銆銆銆return; <br />銆銆} <br />銆銆ResultSet rs = null; <br />銆銆ResultSetMetaData md = null; <br />銆銆Statement stmt = null; <br />銆銆try { <br />銆銆銆stmt = con.createStatement(); <br />銆銆銆rs = stmt.executeQuery("SELECT * FROM EMPLOYEE"); <br />銆銆銆md = rs.getMetaData(); <br />銆銆銆out.println("Employee data "); <br />銆銆銆while (rs.next()) { <br />銆銆銆銆out.println(" "); <br />銆銆銆銆for (int i = 1; i < md.getColumnCount(); i++) { <br />銆銆銆銆銆out.print(rs.getString(i) + ", "); <br />銆銆銆銆} <br />銆銆銆} <br />銆銆銆stmt.close(); <br />銆銆銆rs.close(); <br />銆銆} <br />銆銆catch (SQLException e) { <br />銆銆銆e.printStackTrace(out); <br />銆銆} <br />銆銆connMgr.freeConnection("idb", con); <br />銆} <br />銆public void destroy() { <br />銆銆connMgr.release(); <br />銆銆super.destroy(); <br />銆} <br />} </td></tr></tbody></table><br />聽聽<img src ="http://www.tkk7.com/xixidabao/aggbug/47390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/xixidabao/" target="_blank">JAVA涔嬭礬</a> 2006-05-21 23:47 <a href="http://www.tkk7.com/xixidabao/archive/2006/05/21/47390.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>JDBC鍩虹(涓?http://www.tkk7.com/xixidabao/archive/2006/05/10/45555.htmlJAVA涔嬭礬JAVA涔嬭礬Wed, 10 May 2006 14:46:00 GMThttp://www.tkk7.com/xixidabao/archive/2006/05/10/45555.html聽聽聽聽鍓嶉潰璇磋繃,Statement瀵硅薄鏄敤鏉ョ粦瀹氳鎵ц鐨勬搷浣滅殑,鍦ㄥ畠涓婇潰鏈変笁縐嶆墽琛屾柟娉?
鍗崇敤鏉ユ墽琛屾煡璇㈡搷浣滅殑executeQuery(),鐢ㄦ潵鎵ц鏇存柊鎿嶄綔鐨別xecuteUpdate()鍜岀敤鏉ユ墽琛?br />鍔ㄦ佺殑鏈煡鐨勬搷浣滅殑execute().
聽聽聽聽JDBC鍦ㄧ紪璇戞椂騫朵笉瀵硅鎵ц鐨凷QL璇彞媯嫻?鍙槸鎶婂畠鐪嬬潃涓涓猄tring,鍙湁鍦ㄩ┍鍔?br />紼嬪簭鎵цSQL璇彞鏃舵墠鐭ラ亾姝g‘涓庡惁.
聽聽聽聽涓涓猄tatement瀵硅薄鍚屾椂鍙兘鏈変竴涓粨鏋滈泦鍦ㄦ椿鍔?榪欐槸瀹藉鎬х殑,灝辨槸璇村嵆浣挎病鏈?br />璋冪敤ResultSet鐨刢lose()鏂規硶,鍙鎵撳紑絎簩涓粨鏋滈泦灝遍殣鍚潃瀵逛笂涓涓粨鏋滈泦鐨勫叧闂?鎵浠?br />濡傛灉浣犳兂鍚屾椂瀵瑰涓粨鏋滈泦鎿嶄綔,灝辮鍒涘緩澶氫釜Statement瀵硅薄,濡傛灉涓嶉渶瑕佸悓鏃舵搷浣?閭d箞鍙?br />浠ュ湪涓涓猄tatement瀵硅薄涓婇』搴忔搷浣滃涓粨鏋滈泦.
聽聽聽聽
聽聽聽聽榪欓噷鎴戜笉寰椾笉鐗瑰埆璇存槑涓涓?寰堝浜轟細鐢ㄤ竴涓猄tatement榪涜宓屽鏌ヨ,鐒跺悗灝辨潵闂?br />鎴戣涓轟粈涔堜笉鑳藉驚鐜?閬撶悊涓婇潰宸茬粡璇存竻妤氫簡.鎴戜滑鏉ヨ緇嗗垎鏋愪竴涓嬪祵濂楁煡璇?
聽聽聽聽Connection聽conn聽=聽null;
聽聽聽聽Statement聽stmt聽=聽null;
聽聽聽聽conn聽=聽.......;
聽聽聽聽stmt聽=聽conm.createStatement(xxxxxx);
聽聽聽聽ResultSet聽rs聽=聽stmt.executeQuery(sql1);
聽聽聽聽while(rs.next()){
聽聽聽聽聽聽聽聽str聽=聽rs.getString(xxxxx);
聽聽聽聽聽聽聽聽ResultSet聽rs1聽=聽stmt.executeQuery(\"select聽*聽from聽琛爓here聽瀛楁=str\");
聽聽聽聽}
褰搒tmt.executeQuery(\"select聽*聽from聽琛爓here聽瀛楁=str\");璧嬬粰rs1鏃?榪欐椂闅愬惈鐨勬搷浣?br />鏄凡緇忓叧闂簡rs,浣犺繕鑳藉驚鐜笅鍘誨悧?
鎵浠ュ鏋滆鍚屾椂鎿嶄綔澶氫釜緇撴灉闆嗕竴瀹氳璁╁畠浠栫粦瀹氬埌涓嶅悓鐨凷tatement瀵硅薄涓?濂藉湪涓涓猚onnection
瀵硅薄鍙互鍒涘緩浠繪剰澶氫釜Statement瀵硅薄,鑰屼笉闇瑕佷綘閲嶆柊鑾峰彇榪炵粨.

聽聽聽聽鍏充簬鑾峰彇鍜岃緗甋tatement鐨勯夐」:鍙鐪嬬湅瀹冪殑getXXX鏂規硶鍜宻etXXX鏂規硶灝辨槑鐧戒簡,榪欏効
浣滀負鍩虹鐭ヨ瘑鍙彁涓涓嬩互涓嬪嚑涓?
聽聽聽聽setQueryTimeout,璁劇疆涓涓猄QL鎵ц鐨勮秴鏃墮檺鍒?
聽聽聽聽setMaxRows,璁劇疆緇撴灉闆嗚兘瀹圭撼鐨勮鏁?
聽聽聽聽setEscapeProcessing,濡傛灉鍙傛暟涓簍rue,鍒欓┍鍔ㄧ▼搴忓湪鎶奡QL璇彞鍙戠粰鏁版嵁搴撳墠榪涜杞箟鏇?br />鎹?鍚﹀垯璁╂暟鎹簱鑷繁澶勭悊,褰撶劧榪欎簺榛樿鍊奸兘鍙互閫氳繃get鏂規硶鏌ヨ.

聽聽聽聽Statement鐨勪袱涓瓙綾?
聽聽聽聽PreparedStatement:瀵逛簬鍚屼竴鏉¤鍙ョ殑澶氭鎵ц,Statement姣忔閮借鎶奡QL璇彞鍙戦佺粰鏁版嵁
搴?榪欐牱鍋氭晥鐜囨槑鏄句笉楂?鑰屽鏋滄暟鎹簱鏀寔棰勭紪璇?PreparedStatement鍙互鍏堟妸瑕佹墽琛岀殑璇彞涓嬈″彂
緇欏畠,鐒跺悗姣忔鎵ц鑰屼笉蹇呭彂閫佺浉鍚岀殑璇彞,鏁堢巼褰撶劧鎻愰珮,褰撶劧濡傛灉鏁版嵁搴撲笉鏀寔棰勭紪璇?
PreparedStatement浼氳薄Statement涓鏍峰伐浣?鍙槸鏁堢巼涓嶉珮鑰屼笉闇瑕佺敤鎴峰伐鎵嬪共棰?
聽聽聽聽鍙﹀PreparedStatement榪樻敮鎸佹帴鏀跺弬鏁?鍦ㄩ緙栬瘧鍚庡彧瑕佷紶杈撲笉鍚岀殑鍙傛暟灝卞彲浠ユ墽琛?澶уぇ
鎻愰珮浜嗘ц兘.
聽聽聽聽聽聽聽聽
聽聽聽聽PreparedStatement聽ps聽=聽conn.prepareStatement(\"select聽*聽from聽琛爓here聽瀛楁=?\");
聽聽聽聽ps.setString(1,鍙傛暟);
聽聽聽聽ResultSet聽rs聽=聽ps.executeQuery();
聽聽聽聽
聽聽聽聽CallableStatement:鏄疨reparedStatement鐨勫瓙綾?瀹冨彧鏄敤鏉ユ墽琛屽瓨鍌ㄨ繃紼嬬殑.
聽聽聽聽CallableStatement聽sc聽=聽conn.prepareCall(\"{call聽query()}\");
聽聽聽聽ResultSet聽rs聽=聽cs.executeQuery();
聽聽聽聽
聽聽聽聽鍏充簬鏇撮珮綰х殑鐭ヨ瘑鎴戜滑鍦↗DBC楂樼駭搴旂敤涓粙緇?聽

JAVA涔嬭礬 2006-05-10 22:46 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 免费观看激色视频网站bd | 曰批全过程免费视频网址| 香蕉免费在线视频| 黄色视频在线免费观看| 东北美女野外bbwbbw免费| jizz18免费视频| 青青操视频在线免费观看| 最近免费中文字幕MV在线视频3 | 亚洲一区二区三区高清不卡 | 亚洲三区在线观看无套内射| 中文字幕在线亚洲精品| 亚洲精品自产拍在线观看| 亚洲精品国产精品乱码在线观看| 国产亚洲成av人片在线观看| 亚洲免费视频网站| 亚洲av永久综合在线观看尤物| 国产精品亚洲片在线va| 亚洲国产精品成人午夜在线观看 | 人妻无码中文字幕免费视频蜜桃| 一级毛片视频免费观看| 青青青国产手机频在线免费观看| 三年片在线观看免费观看大全一| 国产精品视频免费观看| 女人18毛片水真多免费播放 | 1000部夫妻午夜免费| 日韩欧美一区二区三区免费观看| 成人免费a级毛片| 全部免费毛片在线| 亚洲乱亚洲乱妇无码麻豆| 久久精品国产亚洲av影院| 亚洲欧洲日产国码久在线| 日韩大片在线永久免费观看网站| 青柠影视在线观看免费高清| 永久免费视频网站在线观看| 色www永久免费视频| 国产精品V亚洲精品V日韩精品| 久久亚洲免费视频| 亚洲人成网站18禁止| a毛片免费在线观看| 成人毛片免费观看视频大全| 亚洲日本中文字幕天堂网|