版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JDBC連接數(shù)據(jù)庫,計(jì)算機(jī)與通信學(xué)院 軟件工程學(xué)院,回顧和擴(kuò)展,網(wǎng)上商城 之前我們已經(jīng)應(yīng)用JSP和servlet做了一個(gè)網(wǎng)上商城的簡(jiǎn)單小程序。 但是其中的用戶數(shù)據(jù)(用戶名,密碼等)和商品數(shù)據(jù)都是直接以變量形式保存在JSP頁面或者java類中,一旦服務(wù)器程序終止,這些變量也隨之釋放,不能長(zhǎng)久地保存數(shù)據(jù)。,JDBC簡(jiǎn)介,JDBC簡(jiǎn)介商業(yè)應(yīng)用的后臺(tái)數(shù)據(jù)一般存放在數(shù)據(jù)庫中,很明顯,可以通過 Java 代碼來訪問數(shù)據(jù)庫。
2、 在 Java 技術(shù)系列中,訪問數(shù)據(jù)庫的技術(shù)叫做 JDBC(Java DateBase Connectivity),它提供了一系列的 API,讓 Java 語言編寫的代碼連接數(shù)據(jù)庫,對(duì)數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行添加、刪除、修改和查詢。,JDBC簡(jiǎn)介,JDBC編程接口JDBC提供了兩種編程接口:面向普通程序員用于數(shù)據(jù)庫連接操作的的JDBC API,和面向JDBC驅(qū)動(dòng)程序開發(fā)的JDBC Driver Interface.,JAEE 應(yīng)用
3、程序,,普通程序員,JDBC API,JDBC驅(qū)動(dòng)程序,,數(shù)據(jù)庫廠商程序員,JDBC Driver Interface,數(shù)據(jù)庫,,,,,,,JDBC簡(jiǎn)介,JDBC編程接口JDBC API只關(guān)心java調(diào)用sql的抽象接口,而不考慮具體使用哪種方式實(shí)現(xiàn),具體數(shù)據(jù)庫調(diào)用靠JDBC驅(qū)動(dòng)程序完成。因此,我們普通程序員只要按照J(rèn)DBC API撰寫一次程序,然后搭建不同的JDBC驅(qū)動(dòng)程序,便可以操作不同的數(shù)據(jù)庫。,JDBC API,JDBC
4、Driver Interface,數(shù)據(jù)庫,,,JDBC簡(jiǎn)介,JDBC 驅(qū)動(dòng)器程序針對(duì)不同類型的數(shù)據(jù)庫,JDBC 機(jī)制中提供了“驅(qū)動(dòng)程序”的的概念。程序只需要使用數(shù)據(jù)庫廠商提供的驅(qū)動(dòng)程序,就可以連接數(shù)據(jù)庫并進(jìn)行操作。,JSP(含JDBC代碼),MircosoftSql server驅(qū)動(dòng),OracleDatabase驅(qū)動(dòng),Mysql Database驅(qū)動(dòng),,,,,,,,,,Sql server數(shù)據(jù)庫,Orcale數(shù)據(jù)庫,Mys
5、ql數(shù)據(jù)庫,,,,,,,,,,JDBC簡(jiǎn)介,JDBC 驅(qū)動(dòng)器程序JDBC驅(qū)動(dòng)程序有兩種主要的類型:JDBC驅(qū)動(dòng):大多數(shù)數(shù)據(jù)庫系統(tǒng)都實(shí)現(xiàn)的JDBC驅(qū)動(dòng)程序,JSP可以用它直接訪問數(shù)據(jù)庫。ODBC橋:有些數(shù)據(jù)庫系統(tǒng)沒有直接提供JDBC驅(qū)動(dòng),但是它們往往提供了ODBC驅(qū)動(dòng),ODBC即微軟公司設(shè)計(jì)開發(fā)的windows系統(tǒng)開放數(shù)據(jù)庫互聯(lián)接口(Open Database Connectivity)。JSP可以通過SUN公司的JDBC-ODB
6、C橋來實(shí)現(xiàn)對(duì)它們的訪問。,JDBC簡(jiǎn)介,JDBC APIJDBC API由用戶調(diào)用,以實(shí)現(xiàn)基本的數(shù)據(jù)庫操作。其中包括四個(gè)類:java.sql.Connection:負(fù)責(zé)連接數(shù)據(jù)庫 java.sql.Statement:負(fù)責(zé)執(zhí)行數(shù)據(jù)庫 SQL 語句java.sql.ResultSet:負(fù)責(zé)存放查詢結(jié)果java.sql.DriverManager:負(fù)責(zé)裝載驅(qū)動(dòng)程序請(qǐng)大家特別注意這四個(gè)類的使用~,JDBC開發(fā)數(shù)據(jù)庫,使用JDBC進(jìn)
7、行數(shù)據(jù)庫開發(fā)一般來講,使用JDBC進(jìn)行數(shù)據(jù)庫應(yīng)用開發(fā)可分為如下幾步:,數(shù)據(jù)庫種類很多。這里我們以MyEclipse自帶的Derby數(shù)據(jù)庫為例,演示如何使用JDBC驅(qū)動(dòng)連接數(shù)據(jù)庫,和使用JDBC API操作數(shù)據(jù)庫。,JDBC開發(fā)數(shù)據(jù)庫,Derby數(shù)據(jù)庫先簡(jiǎn)單介紹一下Derby數(shù)據(jù)庫。Apache Derby是一個(gè)完全用java編寫的開源數(shù)據(jù)庫。Apache Derby非常小巧,核心部分derby.jar只有2M,所以既可以做為單獨(dú)的
8、數(shù)據(jù)庫服務(wù)器使用,也可以內(nèi)嵌在應(yīng)用程序中使用。myEclipse中直接自帶該軟件。編寫一個(gè)數(shù)據(jù)庫程序并不簡(jiǎn)單。Apache Derby 數(shù)據(jù)庫也不例外。它最早于1996年開始開發(fā),2004年由IBM捐獻(xiàn)給Apache基金會(huì)。你可以在其官網(wǎng)下載該數(shù)據(jù)庫及相關(guān)驅(qū)動(dòng)程序軟件:http://db.apache.org/derby/blogs/index.html,JDBC開發(fā)數(shù)據(jù)庫,Derby數(shù)據(jù)庫的JDBC驅(qū)動(dòng)程序要在數(shù)據(jù)庫中使用Der
9、by,必須在新建的項(xiàng)目中引入derbyclinet.jar這個(gè)JDBC驅(qū)動(dòng)程序,將其拷貝到項(xiàng)目的classpath中去。derbyclinet.jar文件的位置:myEclipse自帶此包。例如,myEclipse10的安裝目錄MyEclipse 10\configuration\org.eclipse.osgi\bundles\19\1\.cp\lib 下就有derbyclinet.jar。同學(xué)們也可以下載一個(gè)叫everythin
10、g的軟件,它可以快速地幫你找到你的電腦里的文件?;蛘呷ス倬W(wǎng)下載derby全套文件,里面包含derbyclinet.jar : http://db.apache.org/derby/derby_downloads.html,JDBC開發(fā)數(shù)據(jù)庫,給工程添加Derby.jar新建一個(gè)web project,起名JSPJDBC。將derbyclient.jar復(fù)制到webRoot/WEB-INF/目錄下。,JDBC開發(fā)數(shù)據(jù)庫,啟動(dòng)Derby
11、數(shù)據(jù)庫點(diǎn)擊菜單欄中的【myEclipse Derby】?【Start】,啟動(dòng)Derby數(shù)據(jù)庫:,,,,查看Derby數(shù)據(jù)庫點(diǎn)擊菜單欄中的透視圖按鈕【】?【MyEclipse Database Explorer】,系統(tǒng)就可以打開數(shù)據(jù)庫視窗。如下圖所示:,回顧和擴(kuò)展,透視圖按鈕,數(shù)據(jù)庫視窗,JDBC開發(fā)數(shù)據(jù)庫,Derby數(shù)據(jù)庫的信息鏈接數(shù)據(jù)庫,最重要的是要知道該數(shù)據(jù)庫的關(guān)鍵信息:connection URL User name (
12、可以修改)Password (可以修改)diver classname在數(shù)據(jù)庫視窗,右鍵點(diǎn)擊Derby數(shù)據(jù)庫,選擇【Edit】,查看Derby數(shù)據(jù)庫屬性,如右圖所示。記住數(shù)據(jù)庫的關(guān)鍵信息。,JDBC開發(fā)數(shù)據(jù)庫,寫一個(gè)讀寫數(shù)據(jù)庫的文件然后我們寫一個(gè)讀寫數(shù)據(jù)的JSP文件。詳見附件index.jsp。使用MyEclipse自帶的服務(wù)器程序運(yùn)行本項(xiàng)目,成功后可以看到:接下來我們?cè)敿?xì)解析index.jsp中的代碼,了解數(shù)據(jù)庫
13、操作過程。,操作數(shù)據(jù)庫代碼詳解,1.導(dǎo)入java.sql相關(guān)類要操作數(shù)據(jù)庫,務(wù)必導(dǎo)入java.sql.* 。 有了此sql相關(guān)類,我們才能方便地操作數(shù)據(jù)庫。,操作數(shù)據(jù)庫代碼詳解,2.定義數(shù)據(jù)庫名等相關(guān)參數(shù)數(shù)據(jù)庫相關(guān)參數(shù),要么放到配置文件中保存,要么以全局變量的形式(通常為全大寫)置于JSP文件中。//全局變量,數(shù)據(jù)庫名,要跟DB explorer的配置信息一致哦String DBNAME = "MyEclips
14、e Derby";//連接端口int NETWORKSERVER_PORT=1527;//驅(qū)動(dòng)類名String DERBY_CLIENT_DRIVER = "org.apache.derby.jdbc.ClientDriver";,操作數(shù)據(jù)庫代碼詳解,3.使用try{}catch(){}結(jié)構(gòu)畢竟數(shù)據(jù)庫是第三方軟件,不能保證每次連接都成功。為了便于在發(fā)生錯(cuò)誤時(shí)調(diào)試代碼,我們通常使用可以捕獲異
15、常的try{}catch(){}結(jié)構(gòu)包裹數(shù)據(jù)庫連接代碼。 try{ /* ---------具體的數(shù)據(jù)庫鏈接代碼------------- */}catch(SQLException e){//捕獲sql異常,輸出異常的錯(cuò)誤碼、原因、消息out.print(e.getErrorCode() + "");out.print(e.getCause() + &q
16、uot;");out.print(e.getMessage() + "");if(conn != null ) conn.close();},操作數(shù)據(jù)庫代碼詳解,4.裝載驅(qū)動(dòng)程序 (DriverManager)接下來在try{…}的括號(hào)中,書寫數(shù)據(jù)庫鏈接程序。其中第一步是裝載驅(qū)動(dòng)程序。 //裝載驅(qū)動(dòng)程序Class.forName(DER
17、BY_CLIENT_DRIVER).newInstance();注意,如果運(yùn)行時(shí)出現(xiàn)500錯(cuò)誤,提示找不到 org.apache.derby.jdbc.ClientDriver class,說明項(xiàng)目沒有加載驅(qū)動(dòng)程序類庫。請(qǐng)按本PPT第12頁方法給項(xiàng)目添加derbyclient.jar依賴包。如果還有問題,可以將derbyclient.jar復(fù)制到webRoot/WEB-INF/src目錄下,然后重啟數(shù)據(jù)庫和服務(wù)器再試試。,操作數(shù)
18、據(jù)庫代碼詳解,5.建立連接對(duì)象 (Connection)通過JDBC鏈接到數(shù)據(jù)庫,獲取連接對(duì)象conn。//建立連接,三個(gè)參數(shù):url,username,passwordconn = DriverManager.getConnectionDERBY_CLIENT_URL,"zhangdi", "123456");,操作數(shù)據(jù)庫代碼詳解,6.執(zhí)行sql語句 ( Statement )使用sta
19、tement對(duì)象運(yùn)行SQL語句。Statement的常用方法有: execute, executeUpdate, executeQuery等,分別負(fù)責(zé)創(chuàng)建表、增刪改查表、查詢表。//創(chuàng)建statement對(duì)象Statement st = conn.createStatement();//執(zhí)行sql語句//建一個(gè)名為USERINFO的表,使用execute方法st.execute("create table US
20、ERINFO (USERID INT NOT NULL, USERNAME VARCHAR(10) NOT NULL)");//增刪改查表中的內(nèi)容,用executeUpdate方法st.executeUpdate(“insert into USERINFO(USERID, USERNAME) values (1, ‘張迪')");//讀取表的內(nèi)容,用executeQuery方法ResultSet rs
21、 = st.executeQuery("select * from USERINFO");,操作數(shù)據(jù)庫代碼詳解,7.處理查詢結(jié)果( ResultSet)使用statement對(duì)象查詢到的結(jié)果,會(huì)被保存在ResultSet對(duì)象中。//讀取表的內(nèi)容,用executeQuery方法ResultSet rs = st.executeQuery("select * from USERINFO");
22、 ResultSet對(duì)象可以理解為是一個(gè)小表格。其中有一個(gè)可移動(dòng)的指針,指向每一行數(shù)據(jù)。通過rs.next()可以將游標(biāo)移到下一行,它的返回值是一個(gè)布爾類型,即如果下一行有數(shù)據(jù)則返回為 true,否則為 flase??梢允褂?rs.next()配上 while 循環(huán)來對(duì)結(jié)果進(jìn)行遍歷。//循環(huán)輸出內(nèi)容while(rs.next()){int userID = rs.getInt(1);String username = rs.
23、getString(2);out.println("-------------------");out.println("用戶ID:"+ userID +"");out.println("用戶用戶名:"+ username +"");out.println("-------------------");
24、},操作數(shù)據(jù)庫代碼詳解,7.處理查詢結(jié)果( ResultSet)當(dāng)游標(biāo)指向某一行,可以通過 ResultSet 的 getXXX(“列名”)方法得到這一行的某個(gè)數(shù)據(jù), XXX 是該列的數(shù)據(jù)類型,可以是 String,也可以是 int 等,但是所有類型的數(shù)據(jù)都可以用 getString()方法獲得。除了通過列名獲得數(shù)據(jù)外,還可以通過列的編號(hào)來獲得。int userID = rs.getInt(1); //使用編號(hào)獲取數(shù)據(jù)St
25、ring username = rs.getString(“USERNAME”); //使用列名獲取數(shù)據(jù),操作數(shù)據(jù)庫代碼詳解,關(guān)于游標(biāo)的注意 ( ResultSet) 游標(biāo)的初始值并不是指向第 1 行數(shù)據(jù),而是指向第 1 行的前面那條數(shù)據(jù)。所以必須要運(yùn)行一次 next()函數(shù)之后,才能從開始取數(shù)據(jù),如果強(qiáng)行取則會(huì)找不到該列而報(bào)錯(cuò)。 從某一行中通過 getXXX()方法取數(shù)據(jù)每一列只能取一次,超過一次,程序?qū)?huì)報(bào)錯(cuò),如果需要重復(fù)
26、使用某列數(shù)據(jù),可以先定義一個(gè)變量,將取出的數(shù)據(jù)賦予它,再重復(fù)使用。,ODBC使用簡(jiǎn)介,ODBC使用簡(jiǎn)介前文以MyEclipse自帶的Derby數(shù)據(jù)庫為例,演示如何使用JDBC驅(qū)動(dòng)連接數(shù)據(jù)庫,和使用JDBC API操作數(shù)據(jù)庫。但是,并不是所有數(shù)據(jù)庫軟件都有JDBC驅(qū)動(dòng)程序,例如微軟的Access數(shù)據(jù)庫,excel表格軟件等。這時(shí)就要使用微軟公司推出的ODBC(Open Database Connectivity)作為輔助。下文中將
27、以excel軟件為例,演示如何通過JDBC-ODBC橋,實(shí)現(xiàn)對(duì)excel的訪問。,ODBC使用簡(jiǎn)介,創(chuàng)建excel數(shù)據(jù)源首先我們要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫。在我們的一般概念里,Excel軟件并不是數(shù)據(jù)庫軟件,而是一個(gè)常用的表格處理軟件,實(shí)際應(yīng)用中人們常把重要數(shù)據(jù)保存在其中。但是如果我們考察數(shù)據(jù)庫軟件的歷史,excel這種表格處理軟件,其實(shí)可以理解為第一代文檔式數(shù)據(jù)庫系統(tǒng)。(第二代層次數(shù)據(jù)庫,第三代關(guān)系數(shù)據(jù)庫…) 而且Excel軟件功能比我們想
28、象的大得多,我們可以通過sql語言來操作它。,ODBC使用簡(jiǎn)介,創(chuàng)建ODBC數(shù)據(jù)源要?jiǎng)?chuàng)建JDBC-ODBC橋訪問數(shù)據(jù)庫,必須先為數(shù)據(jù)庫建立一個(gè)ODBC數(shù)據(jù)源。選擇【開始】?【控制面板】 ? 【管理工具】 ? 【數(shù)據(jù)源】,打開ODBC數(shù)據(jù)源管理器對(duì)話框,如下圖所示:,ODBC使用簡(jiǎn)介,創(chuàng)建ODBC數(shù)據(jù)源點(diǎn)擊【添加】,打開創(chuàng)建新數(shù)據(jù)源對(duì)話框,選擇Micrsoft Excel Driver(*.xls)選項(xiàng),然后在ODBC Micros
29、oft Excel安裝對(duì)話框中輸入數(shù)據(jù)源名稱。本例中輸入的數(shù)據(jù)源名稱為xs_excel,然后點(diǎn)擊【選擇工作簿】按鈕,選擇之前創(chuàng)建的xs.xls文件即可。,ODBC使用簡(jiǎn)介,連接ODBC數(shù)據(jù)源接下來我們需要給項(xiàng)目添加JDBC-ODBC驅(qū)動(dòng)程序。具體的說,是這個(gè)類:sun.jdbc.odbc.JdbcOdbcDriver 。該類在JDK1.7 的rt.jar中有(其他版本中沒有)。將其復(fù)制到項(xiàng)目工程目錄的WebRoot/WEB-INF/l
30、ib 下。然后參照附件excel.jsp運(yùn)行該程序即可。,ODBC使用簡(jiǎn)介,代碼詳解conn = DriverManager.getConnection(DERBY_CLIENT_URL,"", "");Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATAB
31、LE);//執(zhí)行sql語句//讀取表的內(nèi)容,用executeQuery方法ResultSet rs = st.executeQuery("select * from [Sheet1$]");我們可以看到,可以使用SQL語句來操作Excel中的數(shù)據(jù)。同樣,我們也可以使用ODBC連接sql server, access等多種數(shù)據(jù)庫。,連接mysql數(shù)據(jù)庫,MySQL數(shù)據(jù)庫以上介紹的excel和derby
32、在實(shí)際的大型項(xiàng)目中應(yīng)用較少。如果同學(xué)們想開發(fā)一個(gè)實(shí)際項(xiàng)目,推薦使用MySql數(shù)據(jù)庫。Mysql數(shù)據(jù)庫作為開源關(guān)系型數(shù)據(jù)庫的佼佼者,簡(jiǎn)單易用,穩(wěn)定可靠。諸多大型web應(yīng)用(facebook,淘寶等)都采用mysql數(shù)據(jù)庫作為基礎(chǔ)。具有非常強(qiáng)的可擴(kuò)展性。Mysql數(shù)據(jù)庫簡(jiǎn)單易上手,后期維護(hù)容易。相關(guān)人員培訓(xùn)簡(jiǎn)單,本科學(xué)生即可上手維護(hù)。,連接mysql數(shù)據(jù)庫,MySQL數(shù)據(jù)庫JDBC連接MySql數(shù)據(jù)庫,既可以用驅(qū)動(dòng)程序(名為:Mysq
33、l-connector-java-X.X.X.jar)也可以用JDBC-ODBC橋。這里不再贅述。 細(xì)節(jié)可baidu google。http://jingyan.baidu.com/article/3aed632e1a4ceb70108091f6.html,連接mysql數(shù)據(jù)庫,附錄:Nosql數(shù)據(jù)庫,Introduction to Servlet and JSP Programming,That's All
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)庫實(shí)驗(yàn)jdbc連接數(shù)據(jù)庫
- jdbc連接數(shù)據(jù)庫代碼筆記簡(jiǎn)單易懂niit培訓(xùn)
- ado連接數(shù)據(jù)庫
- ado連接數(shù)據(jù)庫
- 連接數(shù)據(jù)庫代碼.doc
- c#連接數(shù)據(jù)庫
- jsp連接數(shù)據(jù)庫代碼大全
- 連接數(shù)據(jù)庫失敗說明.txt
- 連接數(shù)據(jù)庫失敗說明.txt
- 連接數(shù)據(jù)庫失敗說明.txt
- 連接數(shù)據(jù)庫失敗說明.txt
- mfc中用ado連接數(shù)據(jù)庫
- 連接數(shù)據(jù)庫失敗說明.txt
- 連接數(shù)據(jù)庫失敗說明.txt
- unity3d中連接數(shù)據(jù)庫
- 連接數(shù)據(jù)知識(shí)庫語義查詢處理.pdf
- 《公務(wù)員統(tǒng)計(jì)軟件》登陸時(shí)提示“連接數(shù)據(jù)庫失敗”解決方法
- 數(shù)據(jù)庫連接辦法.txt
- c_連接access數(shù)據(jù)庫
- java實(shí)現(xiàn)數(shù)據(jù)庫連接池
評(píng)論
0/150
提交評(píng)論