Java程序設計項目案例化教程課件:數據庫編程_第1頁
Java程序設計項目案例化教程課件:數據庫編程_第2頁
Java程序設計項目案例化教程課件:數據庫編程_第3頁
Java程序設計項目案例化教程課件:數據庫編程_第4頁
Java程序設計項目案例化教程課件:數據庫編程_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java面向對象程序設計數據庫編程本章內容了解什么是JDBC掌握JDBC的常用類的使用掌握JDBC的編程過程掌握通過JDBC進行數據庫操作9.1引例異常是用來處理程序錯誤的有效機制。通過系統拋出的異常,程序可以很容易地捕獲并處理發生的異常情況。對于一個應用軟件,異常處理是不可缺少的。為了說明什么是異常,我們先來看下面的例子。JDBC概述(JDBC驅動程序)JDBC(JavaDataBaseConnectivity)——java數據庫連接,Java語言訪問數據庫的一種規范,是一套API用于執行SQL語句的JAVAAPI,由java.sql、javax.sql包組成。它由一組用Java編程語言編寫的類和接口組成,能夠用純JavaAPI來編寫數據庫應用程序。Java中JDBC驅動程序有四種。第一種:JDBC-ODBC橋。JDBC-ODBC是一種JDBC驅動程序,是用于將JDBC中的方法調用轉換成ODBC中相應的方法調用,再通過ODBC訪問數據庫。由于微軟推出的ODBC比Sun公司推出JDBC要早,所以絕大多數的數據庫都可以通過ODBC來訪問,當Sun公司推出JDBC的時候,為了支持更多的數據庫,提供了JDBC-ODBC橋。這樣我們就可以使用JDBC的API通過ODBC去訪問數據庫;第二種:本地APIJava驅動程序。本地API驅動程序(native-APIpartly-Javadriver),直接將JDBCAPI翻譯成具體數據庫的API,將JDBC調用轉換為對數據庫的客戶端API的調用;第三種:JDBC網絡純Java驅動程序。Java應用程序通過JDBC網絡純Java驅動程序將JDBC調用發送給應用程序服務器,應用程序服務器與數據庫完成通信,從而完成請求;第四種:純Java驅動。Java應用程序通過純Java驅動程序與支持JDBC的數據庫直接通信。這方式是效率最高的訪問方式。訪問不同廠商的數據庫,需要不同的JDBC驅動程序。目前,幾個主要的數據廠商(Oracle、Microsoft、Sybase等)都提供了對JDBC的支持。Java具有堅固、安全、易于使用、易于理解和可從網絡上自動下載等特性,是編寫數據庫應用程序的杰出語言。所需要的只是Java應用程序與各種不同數據庫之間進行對話的方法。而JDBC正是作為此種用途的機制。應用程序、JDBCAPI、數據庫驅動及數據庫之間的關系如下圖所示:圖9.1應用程序使用JDBC訪問數據庫方式JDBC常用接口和類9.3.2JDBC常用接口和類在JDBC之中的核心組成部分:DriverManager類、Connection接口、Statement接口、PreparedStatement接口、ResultSet接口,即:五個接口一個類,就構成了整個JDBC的組成。1、DriverManager類DriverManager類用來管理數據庫中的所有驅動程序;是JDBC的管理層,作用于用戶和驅動程序之間,跟蹤可用的驅動程序,并在數據庫的驅動程序之間建立連接。DriverManager通過以下靜態方法中的一種嘗試從一組已注冊的JDBC驅動程序中選擇適當的驅動程序:表9.1DriverManager類的方法

publicstaticfinalStringURL="jdbc:mysql://localhost:3306/mydatabase";publicstaticfinalStringUSER="root";publicstaticfinalStringPASSWORD="123456";Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD);方法主要功能getConnection(Stringurl)嘗試建立與給定數據庫URL的連接getConnection(Stringurl,Propertiesinfo)嘗試建立與給定數據庫URL的連接,info作為連接參數的任意字符串標簽/值對的列表;getConnection(Stringurl,Stringuser,Stringpassword)嘗試建立與給定數據庫URL的連接,user正在連接的數據庫用戶,password用戶密碼Connection接口Connection接口代表與特定的數據庫連接,在連接上下文中執行SQL語句并返回結果。下面表中是Connection的常用的方法:表9.2Connection常用方法Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD);Statementstmt=conn.createStatement();方法主要功能void()Connection發布此Connection對象的數據庫和JDBC資源,而不是等待它們自動釋放。()創建一個Statement對象,用于將SQL語句發送到數據庫。PreparedStatementprepareStatement(Stringsql)創建一個PreparedStatement對象,用于將參數化的SQL語句發送到數據庫。Statement接口Statement接口用于在已經建立連接的基礎上向數據庫發送SQL語句。在JDBC中有3中Statement對象,分別是Statement、PreparedStatement和CallableStatement。Statement對象用于執行不帶參數的簡單的SQL語句;PreparedStatement繼承了Statement,用來執行動態的SQL語句;CallableStatement繼承了PreparedStatement,用來執行數據庫的存儲過程的調用。下面表中是Statement的常用的方法:表9.3Statement常用的方法Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("select*fromuserOne");PreparedStatment接口PreparedStatement可以對SQL語句進行預編譯,并且可以存儲在PreparedStatement對象中,當多次執行SQL語句時可以提高效率,并可以提高安全性防止惡意SQL表9.4PreparedStatement的常用方法方法主要功能ResultSetexecuteQuery(Stringsql)執行給定的SQL語句,該語句返回單個ResultSet對象intexecuteUpdate(Stringsql)執行給定的SQL語句,這可能是INSERT,UPDATE,或DELETE語句,或者不返回任何內容,如SQLDDL語句的SQL語句close()Statement對象的數據庫和JDBC資源,而不是等待它自動關閉時發生。stmt.executeUpdate("insert

into

tb_name

(c1,c2,c3)

values

('"+v1+"','"+v2+"',"+v3+"')");

perstmt

=

con.prepareStatement("insert

into

tb_name

(col1,col2,col3)

values

(?,?,?)");

perstmt.setString(1,var1);

perstmt.setString(2,var2);

perstmt.setString(3,var3);

perstmt.executeUpdate();

方法主要功能ResultSetexecuteQuery()執行此PreparedStatement對象中的SQL查詢,并返回查詢PreparedStatement的ResultSet對象intexecuteUpdate()執行在該SQL語句PreparedStatement對象,它必須是一個SQL數據操縱語言(DML)語句,如INSERT,UPDATE或DELETE;或不返回任何內容的SQL語句,例如DDL語句close()PreparedStatement對象的數據庫和JDBC資源,而不是等待它自動關閉時發生。ResultSet接口類似于一個臨時表,用來暫時存放數據庫查詢操作所獲得的結果集。ResultSet實例具有指向當前數據行的指針,指針開始的位置在第一條記錄的前面,通過next()方法可將指針向下移。下面表中是ResultSet的常用的方法:表9.5ResultSet的常用方法ResultSetrs=stmt.executeQuery("select*fromuserOne");while(rs.next()){ System.out.println(rs.getString(1));}rs.close();ResultSet接口方法主要功能boolean

next()將光標從當前位置向前移動一行getString(intcolumnIndex)這個檢索的當前行中指定列的值ResultSet對象為String的Java編程語言getString(StringcolumnLabel)這個檢索的當前行中指定列的值ResultSet對象為String的Java編程語言close()ResultSet釋放此ResultSet對象的數據庫和JDBC資源,而不是等待其自動關閉時發生。JDBC編程步驟通過JDBC為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。闡述JDBC編程步驟以java程序如何連接MySQL數據庫的為例。下面主要介紹JDBC連接MySQL數據庫操作的步驟。在使用JDBC編程之前,要做的就是安裝MySQL數據庫,設置用戶名為:root,設置密碼為:123456,再建立數據庫mydatabase,之后再在mydatabase數據庫下建立表student,作為本章所有案例使用。表9.6student中的字段表9.7student中的內容字段名類型長度能否為空主鍵IDint8否是Namevarchar10否

sexchar1否

majorvarchar20否

phoneint13能

Emailvarchar30能IDNamesexmajorphoneEmail20180101趙錦毫男電子學與信息系統1556545645fsgdrs@163.com20180102趙業超男計算機軟件1756454534sdrgs@20180103陳泊芝女計算機及應用1434534435zgsdg@163.com20180104趙廣然男礦物巖石材料學1437878678szdgs@20180105李馨漫女微電子學1463874546shgfgd@163.com20180106趙強男電子學與信息系統1378548784xgh@20180107趙誠晨男礦物巖石材料學1297868976sthfgb@163.com20180108李長白男計算機軟件1310786745strghgh@20180109陳泊依女計算機軟件1767832428tgwstj@20180110王洋平男微電子學1437652344jhjrer@20180111王顯茹女微電子學1438573237weyji@163.com20180112李風念男電子學與信息系統1437837425fgj@20180113趙麗凡女礦物巖石材料學1742377824iop@20180114王白詩女計算機軟件1786378324etwt@20180115李雄繼男計算機軟件1475327836wrtwju@163.com20180116王哲男計算機軟件1327853847hcvkf@163.com20180117李茹倩女計算機及應用1727487338suijg@163.com20180118王雅騰女礦物巖石材料學1483742788glkbm@20180119趙婉嫻女計算機軟件1723778786dhsty@20180120王中齊男電子學與信息系統1893438963ikdjyn@JDBC驅動程序JDBC驅動是JDBCAPI接口的具體實現,不同數據庫的實現細節不同。驅動類型(四種類型),一般優先使用純Java的驅動,已獲得更好的效率。這些是各個數據庫廠家根據JDBC的規范制作的JDBC實現類各種數據庫的驅動類名如下:表9.6部分數據庫的驅動類名數據庫驅動程序包名驅動類的名字JDBCURLSQLServermsbase.jarmssqlserver.jarmsutil.jarcom.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbnameOracleojdbc14.jaroracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@:1521:dbnameMySQLmysql-connector-java-3.1.11-bin.jarcom.mysql.jdbc.Driverjdbc:mysql://localhost:3306/mydb在注冊JDBC之前首先一定要導入驅動類的架包,例如注冊JDBC驅動程序連接MySQL數據庫之前要導入驅動類的架包:mysql-connector-java-3.1.11-bin.jar在java里面任何class都要裝載在虛擬機上才能運行。這句話就是裝載類用的。Class.forName(name);name是一個字符串,而這個字符串也就是要注冊JDBC驅動程序連接的數據庫的驅動類的名字。例如注冊JDBC驅動程序連接MySQL數據庫Class.forName("com.mysql.jdbc.Driver");注冊JDBC驅動程序連接數據庫和數據庫建立連接通過DriverManager取得Connection對象之后,實際上就表示數據庫連接上了,連接上數據庫就可以進行數據庫的更新及查詢操作,但是操作完成之后,數據庫連接也必須要關閉。例如下面使用Java中JDBC與MySQL數據庫連接:publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase";Connectionconn=DriverManager.getConnection(DBURL,"username","password");創建執行SQL對象與執行語句(發送SQL語句)通過連接對象Connection獲取可以執行sql語句的對象Statement,然后創建執行SQL的對象Statement。Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery(sql);//參數為sql語句通過連接對象Connection獲取已創建SQL語句的對象PreparedStatement,然后執行SQL語句。PreparedStatmentps=conn.prepareStatement(sql);//參數為sql語句ResultSetrs=ps.executeQuery();處理數據庫返回的結果ResultSet接口通常用于保存數據庫的結果集 ResultSetrs=stm.executeQuery(查詢語句);表9.7ResultSet的常用方法方法主要功能next()將指針從當前位置向下移一行getInt(intcolumnIndex)columnIndex是字段的序號,第一個字段(列)是1,第二個字段(列)是2getInt(columnName)columnName是字段名稱注:查詢后ResultSet的默認當前位置是0行,如果要將當前位置移到第一行則要調用一下next()方法; publicvoidselect(){ try{ ResultSetrs=stmt.executeQuery("select*fromstudent"); while(rs.next()){ System.out.print(rs.getInt("ID")+"\t"); System.out.print(rs.getString("Name")); System.out.println(); } }catch(SQLExceptione){ System.out.println("數據庫訪問錯誤"+e); } }釋放資源(關閉連接)。publicstaticvoidcloseConnection(ResultSetrs,Statementstmt,Connectioncon){try{ if(rs!=null){ rs.close();} if(stmt!=null){ stmt.close(); } if(con!=null){ con.close(); } }catch(SQLExceptione){ e.printStackTrace();}}【例9-1】:通過案例來掌握使用JDBC完成數據庫編程步驟。importjava.sql.*;publicclassDemo9_01{ publicstaticfinalStringDBDRIVER="com.mysql.jdbc.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase"+"?characterEncoding=utf8&useSSL=true";publicstaticfinalStringDBUSER="root";publicstaticfinalStringPASSWORD="123456";publicstaticvoidmain(String[]args)throwsException{Connectionconn=null;//每一個Connection對象表示一個數據庫連接Statementstmt=null;//數據庫操作對象Class.forName(DBDRIVER);//加載驅動程序conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD); stmt=conn.createStatement();//找到Statement接口對象 Stringsql="SELECT*FROMstudentwheresex='女'"; ResultSetrs=stmt.executeQuery(sql);//查詢 System.out.println("學號 姓名 性別 專業 "+"電話 Email"); while(rs.next()){ intid=rs.getInt("ID"); Stringname=rs.getString("Name"); Stringsex=rs.getString("sex"); Stringmajor=rs.getString("major"); intphone=rs.getInt("phone"); Stringemail=rs.getString("Email"); System.out.println(+id+""+name+" " +sex+""+major+""+phone+" "+email); } rs.close(); stmt.close();//關閉操作,如果不關閉操作,關閉連接也是一樣的 conn.close();//關閉連接 }}程序運行結果:JDBC-ODBC編程步驟講完使用JDBC完成MySQL數據庫編程步驟,我們來講一下使用JDBC-ODBC完成MySQL數據庫編程步驟。通過JDBC-ODBC連接Mysql數據庫,與JDBC直接連接數據庫差異不大。下面主要介紹JDBC-ODBC連接MySQL數據庫操作的步驟。打開控制面板下的管理工具中的odbc數據源(根據數據庫安裝的不同,選擇32位ODBC數據源或64位ODBC數據源),如圖9.1所示:再用戶DSN下點擊添加,如圖9.2所示:之后選擇:MySQLODBC8.0ANSIDriver,點擊完成,如圖9.3所示:看見用戶DSN中有MySQL,點擊確定按鈕,如圖9.4所示注冊JDBC-ODBC驅動程序為:sun.jdbc.odbc.JdbcOdbcDriver,也只能使用這一種驅動程序。注冊JDBC-ODBC驅動程序連接數據庫與JDBC連接數據庫一樣使用的是Class.forName(name);而不同的是name這個字符串。JDBC連接數據庫的這個字符串也就是要注冊JDBC驅動程序連接的數據庫的驅動類的名字,而JDBC-ODBC連接數據庫的這個字符串只能使用一種:sun.jdbc.odbc.JdbcOdbcDriver。Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");注冊驅動(注冊JDBC-ODBC驅動程序連接數據庫)JDBC-ODBC連接數據庫也是通過DriverManager取得Connection對象之后,不同的是連接使用的URL,JDBC連接數據庫使用的URL是根據連接的數據庫不同使用的URL也不同,而JDBC-ODBC連接數據庫使用的URL:jdbc:odbc:MySQL,URL中的MySQL就是上面的DataSourceName。例如下面使用Java中JDBC-ODBC與MySQL數據庫連接:publicstaticfinalStringDBURL="jdbc:odbc:MySQL";Connectionconn=DriverManager.getConnection(DBURL,"username","password");JDBC-ODBC連接數據庫后面的步驟與JDBC連接數據庫后面的步驟基本相同。和數據庫建立連接【例9-2】:通過案例來掌握使用JDBC-ODBC完成數據庫編程步驟。importjava.sql.*;publicclassDemo9_02{ publicstaticfinalStringDBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver"; publicstaticfinalStringDBURL="jdbc:odbc:MySQL"; publicstaticfinalStringDBUSER="root"; publicstaticfinalStringPASSWORD="123456"; publicstaticvoidmain(String[]args)throwsException{ Connectionconn=null;//每一個Connection對象表示一個數據庫連接 Statementstmt=null;//數據庫操作對象 Class.forName(DBDRIVER);//加載驅動程序 conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD); stmt=conn.createStatement();//找到Statement接口對象 Stringsql="SELECT*FROMstudentwheresex='男'"; ResultSetrs=stmt.executeQuery(sql);//查詢 System.out.println("學號" +"姓名" +"性別" +"專業" +"電話" +"Email"); while(rs.next()){ intid=rs.getInt("ID"); Stringname=rs.getString("Name"); Stringsex=rs.getString("sex"); Stringmajor=rs.getString("major"); intphone=rs.getInt("phone"); Stringemail=rs.getString("Email"); System.out.println(+id+""+name+"" +sex+""+major+""+phone+""+email); } rs.close(); stmt.close();//關閉操作,如果不關閉操作,關閉連接也是一樣的 conn.close();//關閉連接 }}程序運行結果:JDBC數據庫操作(查詢操作)查詢應該返回數據給用戶瀏覽,所以在整個進行查詢的操作之中,就必須有一種結構,可以裝下整個的查詢結果,而這個結構就使用ResultSet表示。當所有的記錄返回到ResultSet的時候,所有的內容都是按照數據類型存放的,所以用戶只需要按照數據類型一行行的取出數據即可。【例9-3】:通過案例來掌握使用ResultSet取出數據importjava.sql.*;publicclassDemo9_03{ publicstaticfinalStringDBDRIVER="com.mysql.jdbc.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase" +"?characterEncoding=utf8&useSSL=true";publicstaticfinalStringDBUSER="root";publicstaticfinalStringPASSWORD="123456";publicstaticvoidmain(String[]args)throwsException{Connectionconn=null;Statementstmt=null;Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD); stmt=conn.createStatement(); Stringsql="SELECT*FROMstudentwheresex='男'"; ResultSetrs=stmt.executeQuery(sql); System.out.println("學號 姓名 性別 專業 " +"電話 Email"); while(rs.next()){ intid=rs.getInt("ID"); Stringname=rs.getString("Name"); Stringsex=rs.getString("sex"); Stringmajor=rs.getString("major"); intphone=rs.getInt("phone"); Stringemail=rs.getString("Email"); System.out.println(+id+""+name+" " +sex+""+major+""+phone+" "+email); } rs.close(); stmt.close(); conn.close(); }}該程序的運行結果:在數據的更新操作之中,如果已經成功的執行了數據的更新,一定會返回更新的行數的。如果要想執行數據表操作在Java之中可以使用Statement接口完成,但是如果要想取得Statement接口對象的話,必須依靠Connection接口完成,通過Connection接口中定義的了executeUpdate(Stringsql)方法完成更新、添加和刪除操作。更新、添加和刪除操作【例9-4】:通過案例掌握數據庫表的數據插入操作。SQL語法:INSERTINTO表名稱(字段,字段,..)VALUES(值,值,…):importjava.sql.*;publicclassDemo9_04{

publicstaticfinalStringDBDRIVER="com.mysql.jdbc.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase" +"?characterEncoding=utf8&useSSL=true";publicstaticfinalStringDBUSER="root";publicstaticfinalStringPASSWORD="123456";publicstaticvoidmain(String[]args)throwsException{Connectionconn=null;Statementstmt=null;Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD);

stmt=conn.createStatement(); Stringsql="INSERTINTOstudent(Name,sex,major,phone,Email)" +"VALUES('蕭風','男','計算機及應用',1327853456,'gdszr@')";

intnum=stmt.executeUpdate(sql); System.out.println("更新行數:"+num);

stmt.close();

conn.close(); }}

該程序的運行結果:【例9-6】:通過案例掌握數據庫表的刪除操作。SQL語法:DELETEFROM

表名稱

WHERE

刪除條件

;importjava.sql.*;publicclassDemo9_06{ publicstaticfinalStringDBDRIVER="com.mysql.jdbc.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase" +"?characterEncoding=utf8&useSSL=true";publicstaticfinalStringDBUSER="root";publicstaticfinalStringPASSWORD="123456";publicstaticvoidmain(String[]args)throwsException{Connectionconn=null;Statementstmt=null;Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD); stmt=conn.createStatement();Stringsql="DELETEFROMstudentWHEREid=20180115";intnum=stmt.executeUpdate(sql);System.out.println("更新行數:"

溫馨提示

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

評論

0/150

提交評論