JDBC快速入門教程_第1頁
JDBC快速入門教程_第2頁
JDBC快速入門教程_第3頁
JDBC快速入門教程_第4頁
JDBC快速入門教程_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

JDBC快速入門教程JDBC是什么?JDBCAPI是一個(gè)JavaAPI,可以訪問任何類型表列數(shù)據(jù),特別是存儲(chǔ)在關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)。JDBC代表Java數(shù)據(jù)庫連接。JDBC庫中所包含的API任務(wù)通常與數(shù)據(jù)庫使用:連接到數(shù)據(jù)庫創(chuàng)建SQL或MySQL語句在數(shù)據(jù)庫中執(zhí)行SQL或MySQL查詢先決條件:學(xué)習(xí)JDBC,需要在以下兩個(gè)主題有一定的了解:JAVA核心編程SQL或MySQL數(shù)據(jù)庫JDBC-環(huán)境設(shè)置:請確認(rèn)您已完成以下設(shè)置:核心JAVA安裝SQL或MySQL數(shù)據(jù)庫安裝除上述者外,需要建立一個(gè)數(shù)據(jù)庫,為本程測試項(xiàng)目使用。假設(shè)這是EMP,在同一個(gè)數(shù)據(jù)庫上創(chuàng)建表Employees。創(chuàng)建JDBC應(yīng)用程序:參與建立一個(gè)JDBC應(yīng)用程序,本教程中按六個(gè)步驟進(jìn)行:導(dǎo)入包:這需要你有軟件包包含了數(shù)據(jù)庫編程所需的JDBC類。大多數(shù)情況下,使用importjava.sql.*就足夠了,如下所示://STEP1.Importrequiredpackagesimportjava.sql.*;注冊JDBC驅(qū)動(dòng)程序:這需要初始化驅(qū)動(dòng)程序,這樣就可以打開與數(shù)據(jù)庫的通信信道。以下是代碼片段實(shí)現(xiàn)這一目標(biāo)://STEP2:RegisterJDBCdriverClass.forName("com.mysql.jdbc.Driver");打開一個(gè)連接:這需要使用DriverManager.getConnection()方法來創(chuàng)建一個(gè)Connection對象,它代表一個(gè)物理連接的數(shù)據(jù)庫,如下所示://STEP3:Openaconnection//DatabasecredentialsstaticfinalStringUSER="username";staticfinalStringPASS="password";System.out.println("Connectingtodatabase...");conn=DriverManager.getConnection(DB_URL,USER,PASS);執(zhí)行一個(gè)查詢:這需要使用一個(gè)對象類型Statement或PreparedStatement構(gòu)建,并提交一個(gè)SQL語句到數(shù)據(jù)庫。如下://STEP4:ExecuteaquerySystem.out.println("Creatingstatement...");stmt=conn.createStatement();Stringsql;sql="SELECTid,first,last,ageFROMEmployees";ResultSetrs=stmt.executeQuery(sql);如果有一個(gè)SQLUPDATE,INSERT或DELETE語句,那么需要下面的代碼片段://STEP4:ExecuteaquerySystem.out.println("Creatingstatement...");stmt=conn.createStatement();Stringsql;sql="DELETEFROMEmployees";ResultSetrs=stmt.executeUpdate(sql);從結(jié)果集中提取數(shù)據(jù):這一步是必需的情況下,從數(shù)據(jù)庫中獲取數(shù)據(jù)??梢允褂眠m當(dāng)?shù)腞esultSet.getXXX()方法來檢索的數(shù)據(jù)結(jié)果如下://STEP5:Extractdatafromresultsetwhile(rs.next()){//Retrievebycolumnnameintid=rs.getInt("id");intage=rs.getInt("age");Stringfirst=rs.getString("first");Stringlast=rs.getString("last");//DisplayvaluesSystem.out.print("ID:"+id);System.out.print(",Age:"+age);System.out.print(",First:"+first);System.out.println(",Last:"+last);}清理環(huán)境:應(yīng)該明確地關(guān)閉所有的數(shù)據(jù)庫資源,對依賴于JVM的垃圾收集如下://STEP6:Clean-upenvironmentrs.close();stmt.close();conn.close();第一個(gè)JDBC程序:基于上面的步驟,我們可以有以下綜合示例代碼,我們可以用它作為模板而寫JDBC代碼:此示例代碼已被寫入基于對環(huán)境和數(shù)據(jù)庫環(huán)境一章中設(shè)置完成。//STEP1.Importrequiredpackagesimportjava.sql.*;publicclassFirstExample{//JDBCdrivernameanddatabaseURLstaticfinalStringJDBC_DRIVER="com.mysql.jdbc.Driver";staticfinalStringDB_URL="jdbc:mysql://localhost/EMP";//DatabasecredentialsstaticfinalStringUSER="username";staticfinalStringPASS="password";publicstaticvoidmain(String[]args){Connectionconn=null;Statementstmt=null;try{//STEP2:RegisterJDBCdriverClass.forName("com.mysql.jdbc.Driver");//STEP3:OpenaconnectionSystem.out.println("Connectingtodatabase...");conn=DriverManager.getConnection(DB_URL,USER,PASS);//STEP4:ExecuteaquerySystem.out.println("Creatingstatement...");stmt=conn.createStatement();Stringsql;sql="SELECTid,first,last,ageFROMEmployees";ResultSetrs=stmt.executeQuery(sql);//STEP5:Extractdatafromresultsetwhile(rs.next()){//Retrievebycolumnnameintid=rs.getInt("id");intage=rs.getInt("age");Stringfirst=rs.getString("first");Stringlast=rs.getString("last");//DisplayvaluesSystem.out.print("ID:"+id);System.out.print(",Age:"+age);System.out.print(",First:"+first);System.out.println(",Last:"+last);}//STEP6:Clean-upenvironmentrs.close();stmt.close();conn.close();}catch(SQLExceptionse){//HandleerrorsforJDBCse.printStackTraceclose();}catch(Exceptione){//HandleerrorsforClass.forNamee.printStackTrace();}finally{//finallyblockusedtocloseresourcestry{if(stmt!=null)stmt.close();}catch(SQLExceptionse2){}//nothingwecandotry{if(conn!=null)conn.close();}catch(SQLExceptionse){se.printStackTrace();}//endfinallytry}//endtrySystem.out.println("Goodbye!");}//endmain}//endFirstExample-by現(xiàn)在讓我們來編譯上面的例子如下:C:\>javacFirstExample.javaC:\>當(dāng)你運(yùn)行FirstExample的,它會(huì)產(chǎn)生以下結(jié)果:C:\>javaFirstExampleConnectingtodatabase...Creatingstatement...ID:100,Age:18,First:Zara,Last:AliID:101,Age:25,First:Mahnaz,Last:FatmaID:102,Age:30,First:Zaid,Last:KhanID:103,Age:28,First:Sumit,Last:MittalC:\>SQLException方法:一個(gè)SQLException既可以發(fā)生在驅(qū)動(dòng)程序和數(shù)據(jù)庫。當(dāng)這樣的異常時(shí),SQLException類型的對象將被傳遞到catch子句。通過SQLException對象有以下幾種方法可用于獲取更多的關(guān)于異常的信息:方法 描述getErrorCode() 獲取與異常關(guān)聯(lián)的錯(cuò)誤號(hào)。getMessage() 獲取的JDBC驅(qū)動(dòng)程序的錯(cuò)誤處理錯(cuò)誤消息的驅(qū)動(dòng)程序,或獲取Oracle錯(cuò)誤號(hào)和消息的數(shù)據(jù)庫錯(cuò)誤。getSQLState() 獲取XOPENSQLSTATE字符串。對于JDBC驅(qū)動(dòng)程序錯(cuò)誤,沒有有用的信息,從該方法返回。對于一個(gè)數(shù)據(jù)庫錯(cuò)誤,五位的XOPENSQLSTATE代碼返回。這種方法可以返回null。getNextException() 獲取異常鏈中的下一個(gè)Exception對象。printStackTrace() 打印當(dāng)前的異常,或可拋出,并回溯到標(biāo)準(zhǔn)錯(cuò)誤流。printStackTrace(PrintStreams) 打印此拋出對象及其回溯到指定的打印流。printStackTrace(PrintWriterw) 打印此拋出對象及其回溯您指定打印作家。通過利用從Exception對象提供的信息,可以捕獲一個(gè)異常,并適當(dāng)?shù)乩^續(xù)運(yùn)行程序。這是一個(gè)try塊中的一般形式:try{//Yourriskycodegoesbetweenthesecurlybraces!!!}catch(Exceptionex){//Yourexceptionhandlingcodegoesbetweenthese//curlybraces,similartotheexceptionclause//inaPL/SQLblock.}finally{//Yourmust-always-be-executedcodegoesbetweenthese//curlybraces.Likeclosingdatabaseconnection.}JDBC-數(shù)據(jù)類型:下表總結(jié)了默認(rèn)的JDBC數(shù)據(jù)類型的Java數(shù)據(jù)類型轉(zhuǎn)換,當(dāng)調(diào)用PreparedStatement或CallableStatement對象的setXXX()方法,或ResultSet.updateXXX()方法。SQL JDBC/Java setXXX updateXXXVARCHAR java.lang.String setString updateStringCHAR java.lang.String setString updateStringLONGVARCHAR java.lang.String setString updateStringBIT boolean setBoolean updateBooleanNUMERIC java.math.BigDecimal setBigDecimal updateBigDecimalTINYINT byte setByte updateByteSMALLINT short setShort updateShortINTEGER int setInt updateIntBIGINT long setLong updateLongREAL float setFloat updateFloatFLOAT float setFloat updateFloatDOUBLE double setDouble updateDoubleVARBINARY byte[] setBytes updateBytesBINARY byte[] setBytes updateBytesDATE java.sql.Date setDate updateDateTIME java.sql.Time setTime updateTimeTIMESTAMP java.sql.Timestamp setTimestamp updateTimestampCLOB java.sql.Clob setClob updateClobBLOB java.sql.Blob setBlob updateBlobARRAY java.sql.Array setARRAY updateARRAYREF java.sql.Ref SetRef updateRefSTRUCT java.sql.Struct SetStruct updateStructJDBC3.0的增強(qiáng)支持BLOB,CLOB,ARRAY,REF數(shù)據(jù)類型。的ResultSet對象UPDATEBLOB(),updateCLOB(),updateArray()和updateRef()方法,使您可以在服務(wù)器上直接操作相應(yīng)的數(shù)據(jù)。setXXX()和updateXXX()方法,可以轉(zhuǎn)換成特定的Java類型到特定的JDBC數(shù)據(jù)類型。setObject()和updateObject()方法,幾乎所有的Java類型映射到JDBC數(shù)據(jù)類型。ResultSet對象提供相應(yīng)的getXXX()方法為每個(gè)數(shù)據(jù)類型來檢索列值。每一種方法,可以使用與列名或由它的序號(hào)位置。SQL JDBC/Java setXXX getXXXVARCHAR java.lang.String setString getStringCHAR java.lang.String setString getStringLONGVARCHAR java.lang.String setString getStringBIT boolean setBoolean getBooleanNUMERIC java.math.BigDecimal setBigDecimal getBigDecimalTINYINT byte setByte getByteSMALLINT short setShort getShortINTEGER int setInt getIntBIGINT long setLong getLongREAL float setFloat getFloatFLOAT float setFloat getFloatDOUBLE double setDouble getDoubleVARBINARY byte[] setBytes getBytesBINARY byte[] setBytes getBytesDATE java.sql.Date setDate getDateTIME java.sql.Time setTime getTimeTIMESTAMP java.sql.Timestamp setTimestamp getTimestampCLOB java.sql.Clob setClob getClobBLOB java.sql.Blob setBlob getBlobARRAY java.sql.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論