《Java面向對象程序設計(第4版)》課件chapter14 JDBC技術和數(shù)據(jù)庫開發(fā)應用_第1頁
《Java面向對象程序設計(第4版)》課件chapter14 JDBC技術和數(shù)據(jù)庫開發(fā)應用_第2頁
《Java面向對象程序設計(第4版)》課件chapter14 JDBC技術和數(shù)據(jù)庫開發(fā)應用_第3頁
《Java面向對象程序設計(第4版)》課件chapter14 JDBC技術和數(shù)據(jù)庫開發(fā)應用_第4頁
《Java面向對象程序設計(第4版)》課件chapter14 JDBC技術和數(shù)據(jù)庫開發(fā)應用_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

教學目標14.1JDBC技術JDBC的體系結構JDBCAPI的主要類和接口簡介14.2創(chuàng)建MySQL的數(shù)據(jù)庫MySQL的安裝和配置創(chuàng)建數(shù)據(jù)庫study14.3Java應用程序通過JDBC存取數(shù)據(jù)庫的過程應用JDBC存取數(shù)據(jù)庫的步驟創(chuàng)建MyEclipse的項目實例:完成JDBC訪問MySQL數(shù)據(jù)庫study教學目標(續(xù))14.4JDBC中的主要接口和類DriverManager類連接SQLServer、Oracle和Access數(shù)據(jù)庫的程序舉例Connection接口Statement接口PreparedStatement接口CallableStatement

接口與Java執(zhí)行MySQL存儲過程的程序舉例Java數(shù)據(jù)類型和SQL中支持的數(shù)據(jù)類型的對應關系ResultSet接口ResultSetMetaData接口DatabaseMetaData接口教學目標(續(xù))14.5基于C/S模式的學生信息數(shù)據(jù)庫管理系統(tǒng)的開發(fā)創(chuàng)建實體層Bean創(chuàng)建數(shù)據(jù)庫訪問層:插入、修改、刪除和瀏覽創(chuàng)建用戶圖形界面層14.6JTable組件與應用實例:以表格形式顯示數(shù)據(jù)庫內容14.1JDBC技術Java程序使用JDBC(JavaDatabaseConnectivity)API與數(shù)據(jù)庫進行通信14.1.1JDBC的體系結構Java應用程序JDBCAPIJDBCDriverManager數(shù)據(jù)庫驅動器Java應用程序數(shù)據(jù)庫數(shù)據(jù)庫數(shù)據(jù)庫Java應用程序圖14-1JDBC的體系結構14.1.2JDBC驅動程序類型1.JDBC-ODBCbridgeplusODBCdriver(類型1):JDBC-ODBC橋接驅動程序。其底層通過ODBC(OpendatabasConnectivity)驅動程序來連接數(shù)據(jù)庫。2.Native-APIpartly-Javadriver(類型2):本地API-部份用Java來編寫的驅動程序。此種方式先將JDBC函數(shù)調用轉換成數(shù)據(jù)庫客戶端函數(shù)庫的API(位于客戶端計算機),然后與數(shù)據(jù)庫相連。3.JDBC-NetpureJavadriver(類型3):JDBC網絡純Java驅動程序。首先JDBC驅動程序會將JDBC函數(shù)調用解釋成與數(shù)據(jù)庫無關的網絡通信協(xié)議,經過中介服務器的第二次解析,最后才轉換成相對應的數(shù)據(jù)庫通信協(xié)議.4.Native-protocolpureJavadriver(類型4)本地協(xié)議純Java驅動程序。這種驅動程序將JDBC調用直接轉換為DBMS所使用的網絡協(xié)議。14.1.3JDBCAPI的主要類和接口簡介JDBCAPI由一系列與數(shù)據(jù)庫訪問有關的類和接口組成,它們放在java.sql子包中。其中主要的類和接口有:DriverManager類:

Connection接口

Statement接口、與子類PreparedStatement、CallableStatement;ResultSet;CallableStatement接口

14.2創(chuàng)建MySQL的數(shù)據(jù)庫MySQL的特點:最受歡迎的開源關系數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQLAB公司開發(fā),目前屬于Oracle公司。MySQL被廣泛地應用在Internet的中小型網站,具備體積小、速度快、總體擁有成本低,開放源碼MySQL使用結構化查詢語言SQL進行數(shù)據(jù)庫管理和操作。免費下載網址:/downloads/14.2.1MySQL的安裝和配置

1.下載Windows版的安裝軟件包:(1)MySql數(shù)據(jù)庫管理軟件:

mysql-essential-5.1.68-win32.msi(必備)(2)mysql的JDBC驅動程序:

mysql-connector-java.jar(必備)(3)mysql的圖形化管理界面軟件:

mysql-gui-tools-5.0-r17-win32.msi(可選)14.2.1MySQL的安裝和配置

2.安裝和配置MySQL軟件(1)雙擊mysql-essential-5.1.68-win32.msi,將進入安裝界面不斷點擊[Next],點擊[Finish]后,開始配置服務器,在配置過程中:選擇[StandardConfiguration]選項;[CharacterSet]選擇字符集為[utf8]或[GBK];[ModifySecuitySetings]中,設置root賬號的用戶口令,如為root;其他選項選擇默認值則可,直到最后點擊[Execute]完成服務器配置。14.2.1MySQL的安裝和配置

2.安裝和配置MySql軟件(2)MySQL安裝完成后,在Windows桌面出現(xiàn)程序項:

“MySQL->MySqlServer5.1->MySQLCommandLineClient”

雙擊“MySQLCommandLineClient”,打開MySql的SQL命令行處理窗口:mysql-essential-5.1.68-win32.msi安裝完成后,只能以DOS命令行方式使用。

14.2.1MySQL的安裝和配置

2.安裝和配置MySql軟件(3)安裝mysql-gui-tools-5.0-r17-win32.msi,安裝完成后程序項出現(xiàn):

單擊“MySqlAdministrator”,將進入MySQL的圖形化管理界面14.2.1MySQL的安裝和配置

2.安裝和配置MySql軟件

單擊“MySqlAdministrator”,將進入MySQL的圖形化管理界面:14.2.1MySQL的安裝和配置

2.安裝和配置MySql軟件

單擊“MySqlAdministrator”,將進入MySQL的圖形化管理界面:14.2.2創(chuàng)建數(shù)據(jù)庫study

數(shù)據(jù)庫Study存放著三張表student,course,sc:學生的基本信息student:學號、姓名、性別、年齡和所在系各字段組成;課程情況表course:課程號、課程名和學分各字段組成;學生學習各門課程的學習成績sc:學號、課程號和學習成績各字段組成。createdatabasestudy;usestudy;CREATETABLEcourse( cnochar(2), cnamechar(16), creditdecimal(2,1));insertintocoursevalues('c1','數(shù)據(jù)庫',4);insertintocoursevalues('c2','數(shù)學', 2.5);insertintocoursevalues('c3','信息系統(tǒng)',4);insertintocoursevalues('c4','英語', 3);CREATETABLEstudent( snochar(5), snamechar(10), ssexchar(2), sageint, sdeptchar(20));insertintostudentvalues('20001','張小明','女',23,'信息系');insertintostudentvalues('20002','李強','男', 21,'計算機系');insertintostudentvalues('20003','王方','女',28,'信息系');insertintostudentvalues('20004','劉晨','男',18,'計算機系');CREATETABLESC(

Snochar(5),Cnochar(2),Gradedecimal(3,0)

);insertintoSCvalues('20001','c1',91);insertintoSCvalues('20001','c2',92);insertintoSCvalues('20001','c3',93);insertintoSCvalues('20001','C4',94);insertintoSCvalues('20002','c2',81);insertintoSCvalues('20002','c3',80);insertintoSCvalues('20004','C1',70);insertintoSCvalues('20004','C2',71);insertintoSCvalues('20004','C3',72);14.2.2創(chuàng)建數(shù)據(jù)庫study

將study.sql文件拷貝到C盤根目錄下,打開MySQLCommandLineClient,運行腳本命令:

sourcec:\study.sql14.3Java應用程序通過JDBC存取數(shù)據(jù)庫的過程

本節(jié)首先介紹通過JDBC存取數(shù)據(jù)庫的步驟,然后通過一個簡單實例演示整個過程。14.3.1應用JDBC存取數(shù)據(jù)庫的步驟Java應用程序通過JDBC存取數(shù)據(jù)庫的步驟:

1.加載JDBC驅動程序,建立數(shù)據(jù)庫連接

2.建立與執(zhí)行SQL語句

3.處理結果集

4.關閉數(shù)據(jù)庫連接1.加載JDBC驅動程序,建立數(shù)據(jù)庫連接。加載JDBC驅動程序,語句格式:

Class.forName(Stringjdbc_driver);

例如:加載MySQL驅動程序的語句:

Class.forName("com.mysql.jdbc.Driver");使用DriverManger.getConnection(),建立一個新的數(shù)據(jù)庫連接。方法格式:

ConnnetiongetConnection(StringconnURl,

StringloginName,Stringpassword);返回連接到特定數(shù)據(jù)庫的Connnetion對象。connURl用來定義連接數(shù)據(jù)庫的參數(shù)。

1.加載JDBC驅動程序,建立數(shù)據(jù)庫連接。例14-1連接MySQL的數(shù)據(jù)庫Study,用戶名為”root”,口令為“root”。則建立數(shù)據(jù)庫連接代碼:try{

Class.forName("com.mysql.jdbc.Driver"); Stringurl="jdbc:mysql://localhost:3306/study";Stringlogin="root",password=="root";

Connectionconn=DriverManager.getConnection(url,login,password)}catch(ClassNotFoundExceptione){//輸出捕獲到的異常信息

e.printStackTrace();}catch(SQLExceptionsqlException){e.printStackTrace();}

2.建立SQL語句對象,執(zhí)行查詢

建立新數(shù)據(jù)庫連接以后,必須先建立一個Statement對象才能執(zhí)行SQL語句。

3種類型的Statememt:Statement、PreparedStatement和CallableStatement。

(1)使用Statement。示例如下:

StatementStmt=conn.createStatement();StringsqlQuery=“select*fromEmployee”;

ResultSetrs=Stmt.executeQuery(sqlQuery);2.建立SQL語句對象,執(zhí)行查詢(續(xù))(2)使用PreparedStatement

用于處理預編譯的SQL語句,可重復執(zhí)行。

PreparedStatementprepStmt=

conn.prepareStatement("SELECT*FROMEmployee");

ResultSet

rs=prepStmt.executeQuery();

用WHERE限制SELECT語句的查詢結果:

PreparedStatementprepStmt=conn.prepareStatement("SELECT*FROMEmployeeWHEREename=?")

prepStmt.setString(1,"SCOTT");

ResultSetrset=prepStmt.executeQuery();

3.建立SQL語句對象,執(zhí)行查詢(續(xù))執(zhí)行帶2個參數(shù)的UPDATE語句,示例如下:

PreparedStatementprepStmt=conn.prepareStatement("UPDATEempSETsal=?WHEREename=?");prepStmt.setInt(1,100000);prepStmt.setString(2,"Rich");

prepStmt.executeUpdate();3.建立SQL語句對象,執(zhí)行查詢(續(xù))(3)CallableStatement:調用數(shù)據(jù)庫的存儲過程,語法:

CallableStatement變量名=conn.prepareCall(“call存儲過程名稱”);示例:

CallableStatementcallStmt=conn.prepareCall("callupdate_salary(?,?)");

callStmt.setInt(1,7788);//設置要傳入的第一個輸入?yún)?shù)(?)值是7788callStmt.setInt(2,10000);

//設置要傳入的第二個輸入?yún)?shù)(?)值是10000

callStmt.execute();2.建立SQL語句對象,執(zhí)行查詢(續(xù))

建立了Statement或PreparedStatement或CallableStatement對象之后,3種方法執(zhí)行SQL語句:

executeQuery():執(zhí)行select的SQL查詢語句

executeUpdate():執(zhí)行insert、delete、update更新語句,以及DDL語句。

execute():執(zhí)行SQL語句。2.建立SQL語句對象,執(zhí)行查詢(續(xù))//SQL查詢語句ResultSetrset=stmt.executeQuery(SELECT*FROMemp);

//update語句stmt.executeUpdate("updateempsetage=age+1");//delete語句stmt.executeUpdate("deleteempforage=20");//DDL語句stmt.execute("CREATETABLEtable“+"(noCHAR(10),nameCHAR(10))");3.處理結果集可用while循環(huán)打印出ResultSet記錄集內所有記錄。

while(rs.next()){

System.out.println(rs.getInt(1));

System.out.println(rs.getString(2));}其中:1、2…表示結果集中的各字段相對位置。例如:

rs.getInt(1)

將讀取結果集中第1個整型字段的的內容,也可以通過字段名讀取內容,寫成:

rs.getInt(“sno”)4.關閉數(shù)據(jù)庫連接通過JDBC存取數(shù)據(jù)庫時最后一個操作是關閉Connection、Statement、ResultSet等對象.rs.close();

stmt.close();con.close();14.3.2創(chuàng)建MyEclipse的項目實例:

完成JDBC訪問MySQL數(shù)據(jù)庫study

例14-2通過JDBC存取study數(shù)據(jù)庫的course表。//JdbcExample.javaimportjava.sql.*;classJdbcExample1{publicstaticvoidmain(Stringargs[]){StringdriverClassName="com.mysql.jdbc.Driver";Stringurl= "jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=UTF-8";Stringusername="root";Stringpassword="root";Connectionconn=null;try{ Class.forName(driverClassName);//加載JDBC驅動程序 //通過數(shù)據(jù)庫連接

conn=DriverManager.getConnection(url,username,password); //建立SQL語句對象

Statementstatement=conn.createStatement(); StringsqlQuery="select*fromcourse"; ResultSetrs=statement.executeQuery(sqlQuery);//執(zhí)行查詢

while(rs.next()){//處理結果集

System.out.print(rs.getString(1)+","); System.out.print(rs.getString(2)+","); System.out.println(rs.getInt(3)); }

//關閉數(shù)據(jù)庫連接

statement.close();conn.close();}//捕獲異常

catch(SQLExceptionsqlException){JOptionPane.showMessageDialog(null,sqlException.getMessage(),"DatabaseError",JOptionPane.ERROR_MESSAGE);System.exit(1);}//detectproblemsloadingdatabasedrivercatch(ClassNotFoundExceptionclassNotFound){JOptionPane.showMessageDialog(null,classNotFound.getMessage(),"DriverNotFound",JOptionPane.ERROR_MESSAGE);System.exit(1);}}//endofmain}//endofclassc1,數(shù)據(jù)庫,4c2,數(shù)學,2.5c3,信息系統(tǒng),4c4,英語,314.3.2創(chuàng)建MyEclipse的項目實例:

完成JDBC訪問MySQL數(shù)據(jù)庫study在MyEclipse環(huán)境下,項目ch14的創(chuàng)建過程:(1)在MyEclipse環(huán)境下,創(chuàng)建JavaProject,起名為ch14。(2)為項目ch14的庫文件[libraries]添加MySQL的JDBC驅動程序包:mysql-connector-java.jar;(3)在項目ch14中,創(chuàng)建類文件JdbcExample.java,輸入正確的文件內容.(4)運行項目的Java應用程序。得到運行結果14.4JDBC中的主要接口和類Java應用程序訪問數(shù)據(jù)庫主要是通過JDBCAPI實現(xiàn)的,通過下面幾個重要接口和類:

DriverManager類

連接SQLServer、Oracle和Access數(shù)據(jù)庫的程序舉例

Connection接口

Statement接口

PreparedStatement接口

CallableStatement接口

ResultSet接口

ResultSetMetaData接口

DatabaseMetaData接口

Java的基本數(shù)據(jù)類型和SQL中支持的數(shù)據(jù)類型對應關系。14.4.1DriverManager類DriverManager類在包java.sql,用于數(shù)據(jù)庫驅動程序管理的類,在數(shù)據(jù)庫和相應驅動程序之間建立連接,也處理諸如驅動程序登錄時間限制及登錄和跟蹤消息的顯示等事務。

DriverManager類的主要成員方法:

static

Connection

getConnection(String

url);static

Connection

getConnection(String

url,String

user,String

password):14.4.2連接SQLServer、Oracle和Access數(shù)據(jù)庫的程序舉例

例14-3

通過創(chuàng)建好的數(shù)據(jù)源名studyDSN,連接MicrosoftSQLServer2008或SQLServer2008express的數(shù)據(jù)庫。創(chuàng)建ODBC數(shù)據(jù)源:用window控制面板中數(shù)據(jù)源“ODBC”管理器,創(chuàng)建一個連接到SQLServer的數(shù)據(jù)源,名稱為studyDSN,連接的數(shù)據(jù)庫是study,用戶為sa,口令為sa。創(chuàng)建好的數(shù)據(jù)源名studyDSN在下列程序中使用:14.4.2連接SQLServer、Oracle和Access數(shù)據(jù)庫的程序舉例

例14-3

實現(xiàn)代碼如下:try{Stringurl="jdbc:odbc:studyDSN";Stringlogin="sa";Stringpassword="sa";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connectionconn=DriverManager.getConnection(url,login,password);}catch(SQLExceptionsqlException){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}14.4.2連接SQLServer、Oracle和Access數(shù)據(jù)庫的程序舉例

例14-4通過JDBC-ODBC驅動程序連接SQLServer2008express版本。但不必事先建立ODBC的數(shù)據(jù)源名。省略了try-catch的主要代碼如下:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Stringurl="jdbc:odbc:Driver={SQLServer};Server=machineName"+"\\"+"SQLEXPRESS;Database=study;uid=sa;pwd=sa";Connectionconn=DriverManager.getConnection(connURL);其中:machineName是機器名或IP地址14.4.2連接SQLServer、Oracle和Access數(shù)據(jù)庫的程序舉例

例14-5從網站下載SQLServer2005或SQLServer2008的sqljdbc_2.0驅動程序包sqljdbc4.jar,并將此包放在用戶應用能訪問的類路徑或項目的庫路徑中。機器名為localhost(本地機器),端口號為1030,數(shù)據(jù)庫為study.

省略了try-catch的主要代碼如下:

Stringurl="jdbc:sqlserver://localhost:1030;DatabaseName=study";Stringuser="sa", pwd="sa";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Connectionconn=DriverManager.getConnection(url,user,password);14.4.2連接SQLServer、Oracle

和Access數(shù)據(jù)庫的程序舉例

例14-6連接Oracle數(shù)據(jù)庫。從網站下載Oracle驅動程序包classes12.zip,并將此包的路徑放在classpath環(huán)境變量中或放在項目的庫路徑中。連接數(shù)據(jù)庫ORCL,機器的ip為0,端口號為1521.省略了try-catch的主要代碼如下:Stringurl="jdbc:oracle:thin:@0:1521:ORCL";Class.forName("oracle.jdbc.driver.OracleDriver");Connectionconn=DriverManager.getConnection(url,user,password);14.4.1DriverManager類例14-7通過JDBC-ODBC連接access的數(shù)據(jù)庫study.mdb。省略了try-catch的主要代碼如下:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Stringurl="jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb)};DBQ=study.mdb";Connectionconn=DriverManager.getConnection(url);14.4.3Connection接口Connection接口是用來表示數(shù)據(jù)庫連接的對象,對數(shù)據(jù)庫的一切操作都是在這個連接的基礎上進行的。Connection接口的成員常用方法:(1)StatementcreateStatement():創(chuàng)建一個statement對象;

(2)

PreparedStatement

prepareStatement(String

sql)

創(chuàng)建PreparedStatement類對象;

(3)

voidclose():

立即釋放連接對象的數(shù)據(jù)庫和JDBC資源;14.4.4Statement接口Statement接口用于在已經建立的連接的基礎上向數(shù)據(jù)庫發(fā)送SQL語句的對象。3種類型的Statement對象:Statement對象用于執(zhí)行不帶參數(shù)的簡單SQL語句;PreparedStatement對象用于執(zhí)行帶或不帶IN參數(shù)的預編譯SQL語句;CallableStatement對象用于執(zhí)行對數(shù)據(jù)庫已存儲過程的調用。14.4.4Statement接口創(chuàng)建statement對象的方法如下:

Statementstmt=conn.createStatement();

Statement接口定義中包括的常用方法:

(1)ResultSet

executeQuery(String

sql)

使用SELECT命令對數(shù)據(jù)庫進行查詢,返回結果集;

(2)

int

executeUpdate(String

sql):

使用INSERT、DELETE、UPDATE對數(shù)據(jù)庫進行新增、刪除和修改記錄操作;

(3)booleanexecute(Stringsql):執(zhí)行SQL語句;

(4)void

close():結束Statement類對象對數(shù)據(jù)庫的聯(lián)機;

14.4.5PreparedStatement接口

PreparedStatement接口和Statement類的不同之處在于PreparedStatement類對象會將傳入的SQL命令事先編好等待使用,當有單一的SQL指令需多次執(zhí)行時,用PreparedStatement會比Statement效率更高。

PreparedStatement接口的常用方法:

(1) ResultSetexecuteQuery():使用SELECT命令對數(shù)據(jù)庫進行查詢;

(2) intexecuteUpdate()

:使用INSERT\DELETE\UPDATE對數(shù)據(jù)庫進行新增、刪除和修改操作;

(3)voidsetXXX(intparameterIndex,XXXx):給PreparedStatement類對象的IN參數(shù)設定為XXX類型的值x。

14.4.5PreparedStatement接口

PreparedStatement對象的創(chuàng)建方法:

PreparedStatementpstmt=con.prepareStatement("updatetbl_Usersetreward=?whereuserId=?");

例如:

(1)如果想給第一個注冊的用戶獎勵5000點(userId=1,reward=5000):pstmt.setInt(1,5000);pstmt.setInt(2,1);

(2)如果想給前50個注冊的用戶每人5000點獎勵:

pstmt.setInt(1,5000);for(inti=0;i<50;i++){pstmt.setInt(2,i);introwCount=pstmt.executeUpdate();} 14.4.6CallableStatement

接口

與Java執(zhí)行MySQL存儲過程的程序舉例CallableStatement接口用于執(zhí)行對數(shù)據(jù)庫的存儲過程。創(chuàng)建

CallableStatement對象的方法如下:

CallableStatementcstmt=con.prepareCall("callprocedure_name(?,?,?,…)");

其中(?,?,?,…)定義了存儲過程的輸入?yún)?shù)和(或)輸出參數(shù)。setXXX方法:向存儲過程傳遞輸入?yún)?shù)(IN)值的。registerOutParameter方法:設置存儲過程的OUT(輸出)參數(shù),getXXX方法:獲取調用存儲過程后的輸出參數(shù)的值結果。

14.4.6CallableStatement

接口

與Java執(zhí)行MySQL存儲過程的程序舉例例14-8利用JDBC接口調用Mysql的存儲過程Query_Student和Query_Study1。打開MySQlCommandClientLine窗口,在數(shù)據(jù)庫study中創(chuàng)建存儲過程Query_Student和Query_Study1。定義不帶參數(shù)的存儲過程Query_Study1:usestudy;DELIMITER//CREATEPROCEDUREQuery_Study1()BEGINSELECTsname,sdept,sageFROMstudent;END//例14-8利用JDBC接口調用Mysql的存儲過程Query_Student和Query_Study1。創(chuàng)建存儲過程Query_Student的腳本內容如下:DELIMITER//CREATEPROCEDUREQuery_Student(INp_nochar(6),OUTp_namechar(20),OUTp_deptchar(10))BEGINSELECTsname,sdeptintop_name,p_deptFROMstudentWHEREsno=p_no;END//JdbcCallProcedure.java的主要代碼:importjava.sql.*;importjavax.swing.*;classjdbcCallProcedure{publicstaticvoidmain(Stringargs[]){StringdriverClassName="com.mysql.jdbc.Driver";Stringurl= "jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=UTF-8";Stringusername="root";Stringpassword="root";try{ Class.forName(driverClassName).newInstance(); Connectionconn=DriverManager.getConnection(url+"&user="+username+"&password="+password);

JdbcCallProcedure.java的主要代碼:

//帶有入口參數(shù)和出口參數(shù)的存儲過程的調用,select的結果是單值

CallableStatementcallStmt=conn.prepareCall("{callQuery_Student(?,?,?)}");//設置要傳入的第一個輸入?yún)?shù)(?)值是20001callStmt.setString(1,"20001");//注冊輸出參數(shù)

callStmt.registerOutParameter(2,java.sql.Types.VARCHAR);callStmt.registerOutParameter(3,java.sql.Types.VARCHAR);

callStmt.execute();Stringb1=callStmt.getString(2);Stringb2=callStmt.getString(3);System.out.println("調用存儲過程Query_Student的結果:");System.out.println(b1+","+b2);

JdbcCallProcedure.java的主要代碼://存儲過程的調用,select的結果是結果集合

System.out.println("調用存儲過程Query_Study1的結果:");callStmt=conn.prepareCall("{callQuery_Study1}");

callStmt.execute();ResultSetrs=callStmt.getResultSet();while(rs.next()){System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getInt(3));}callStmt.close();conn.close();}//一定要捕獲異常

catch(SQLExceptione){ e.printStackTrace();}catch(Exceptione){ e.printStackTrace();}}//endofmain}例14-8利用JDBC接口調用Mysql的存儲過程Query_Student和Query_Study1。程序運行的輸出結果如下:14.4.7Java數(shù)據(jù)類型

和SQL中支持的數(shù)據(jù)類型的對應關系Java的基本數(shù)據(jù)類型和SQL中支持的數(shù)據(jù)類型有一定的對應關系。這種對應關系如表14-1所示(請參見本書)。14.4.8ResultSet接口

結果集(ResultSet):存儲SQL查詢結果的對象,通過維護記錄指針(Cursor)的移動,能操作結果集中的每一行記錄;提供一組方法對數(shù)據(jù)庫進行新增、刪除和修改操作。ResultSet接口常用方法:① booleannext()

:移動記錄指針到結果集的下一條記錄,若移動成功返回true;② 類型get類型(intcolumnIndex):讀取結果集中當前行的指定字段的值;

類型get類型(StringcolumnName)③ booleanabsolute(introw):移動記錄指針到結果集的指定的記錄;④ voidbeforeFirst()

:移動記錄指針到結果集的第一條記錄之前;

⑤ voidafterLast()

:移動記錄指針到結果集的最后一條記錄之后;14.4.8ResultSet接口ResultSet接口常用方法:⑥ booleanfirst():移動記錄指針到結果集的第一條記錄;⑦ booleanlast():移動記錄指針到結果集的最后一條記錄;⑧ booleanprevious():移動記錄指針到結果集的上一條記錄;⑨ ResultSetMetaDatagetMetaData():取得ResultSetMetaData類對象。14.4.9ResultSetMetaData接口

ResultSetMetaData接口的對象保存了所有ResultSet類對象中關于字段的元信息,并提供許多方法來取得這些信息。

ResultSetMetaData接口中的方法(請參見本書)

14.4.10DatabaseMetaData接口DatabaseMetaData接口保存了數(shù)據(jù)庫的所有特性,并且提供許多方法來取得這些信息。

DatabaseMetaData類的主要方法(請參見本書)

14.5基于C/S模式的學生信息數(shù)據(jù)庫管理系統(tǒng)的開例14-9利用MySQl的數(shù)據(jù)庫Study,對數(shù)據(jù)庫中表student進行插入、修改、刪除和瀏覽。分為三層結構(從上層到下層):第1層:視圖層(用戶界面層):用于管理信息的顯示,是與用戶交互的圖形界面。第2層:數(shù)據(jù)庫訪問層:完成與數(shù)據(jù)庫的所有操作。第3層:實體層:對數(shù)據(jù)庫的每個對象基表,都定義了Java中對應的實體類。14.5基于C/S模式的學生信息數(shù)據(jù)庫管理系統(tǒng)的開例14-9利用MySQl的數(shù)據(jù)庫Study,對數(shù)據(jù)庫中表student進行插入、修改、刪除和瀏覽。14.5.1創(chuàng)建實體層Bean

對Study數(shù)據(jù)庫中的表Student完成輸入、修改、刪除的Java程序。這三個程序有相似的GUI,因此聲明類StudentUI以封裝該GUI。例13-2對Study數(shù)據(jù)庫中的表Student完成增加記錄的程序設計。程序由兩個類AddStudentFrame和StudentUI組成。將StudentUI類放在子包UI中;在類AddStudentFrame中,用語句importUI.StudentUI;導入子包中類StudentUI。14.5.1創(chuàng)建實體層Bean對Study數(shù)據(jù)庫中的表student,編寫對應的實體類Student.java:publicclassStudent{

privateStringsno; privateStringsname; privateStringssex; privateintsage;

privateStringSdept; publicStringgetSno(){ returnsno; } publicvoidsetSno(Stringsno){ this.sno=sno; }.......14.5.2創(chuàng)建數(shù)據(jù)庫訪問層:插入、修改、刪除和瀏覽

訪問數(shù)據(jù)庫層:由StudentManager.java和DBConnection.Java組成。

1.DBConnection類的設計:定義了訪問MySql數(shù)據(jù)庫的打開連接和關閉操作,如果要連接其它類型的數(shù)據(jù)庫,只要修改類的變量driverClassName和url的值,而不影響系統(tǒng)的其他代碼。14.5.2創(chuàng)建數(shù)據(jù)庫訪問層:插入、修改、刪除和瀏覽

2.StudentManager.java類的程序設計:封裝了訪問student表的插入、修改、刪除和查詢操作。(1)繼承父類DBConnection:用于DB的連接和關閉(2)構造方法中調用父類的連接方法,即在創(chuàng)建StudentManager對象時完成連接數(shù)據(jù)庫操作。類的域變量Connectionconn在各方法中共享。(3)方法intexecUpdate(Stringsql):定義了對Student表進行更新操作,包括插入、修改、刪除。入口參數(shù)是SQL語句的字符串,返回更新操作的結果,返回結果大于0則更新成功,為0則更新不成功,并及時關閉數(shù)據(jù)庫連接。(4)方法List<Student>Query(StringsqlString):定義了對Student表查詢的結果,并以List結構返回查詢結果集,并及時關閉數(shù)據(jù)庫連接。14.5.3創(chuàng)建用戶圖形界面層:主窗口、主菜單、插入、修改、刪除和瀏覽

圖形界面層GUI:主類Main.java、主窗口主菜單MainFrame.java:Main主類完成創(chuàng)建學生管理系統(tǒng)的主窗口對象,并使主窗口顯示在屏幕居中。MainFrame.java定義了主窗口,在主窗口中創(chuàng)建顯示主菜單,并給各菜單項注冊事件監(jiān)聽處理對象。插入記錄界面:AddStudentPanel.java修改記錄界面:UpdateStudentPanel刪除記錄界面:DeleteStudentPanel.java瀏覽學生信息界面:ListStudentsPanel.java公用界面StudentUI.java:定義了一個學生信息的顯示界面,可作為圖形組件被組合在插入、修改和刪除的圖形界面中。類StudentUI設計思路類StudentUI完成輸入記錄的畫面設計,其設計思路如下:(1)調用者利用StudentUI類構造方法的參數(shù)(字符型數(shù)組StringarrayString[]),傳遞輸入記錄畫面上一組列的標題。在StudentUI類構造方法中,從數(shù)組arrayString的實例變量arrayString.length中可得到列的個數(shù),并取出列的標題放在labels數(shù)組。(2)定義一組文本字段fields[]用于編輯一張表的記錄各字段,并且調用者通過方法getFields()和setFields()可讀取和設置fields值。(3)類StudentUI界面上提供兩個通用Button按鈕doTask1、doTask2,按鈕的標簽內容和按鈕的事件處理過程,可通過調用者來設置。類StudentUI的程序代碼14.6JTable組件與應用實例:以表格形式顯示數(shù)據(jù)庫內容

以二維表格形式表現(xiàn)查詢結果:利用JTable表格類和AbstractTableModel表格模型類JTable類:以二維表的形式顯示表格中的數(shù)據(jù)從表格模型AbstractTableModel類的對象中獲取。1.類JTable

JTable組件屬于javax.swing包,它能以二維表的形式顯示數(shù)據(jù)。類JTable在顯示數(shù)據(jù)時具有以下特點:

(1)可定制性:可以定制數(shù)據(jù)的顯示方式和編輯狀態(tài);

(2)異構性:可以顯示不同類型的數(shù)據(jù)對象,甚至包括顏色、圖標等復雜對象;(3)簡便性:可以以缺省方式輕松地建立起一個二維表。使用類JTable顯示數(shù)據(jù)之前,必須根據(jù)情況先生成定制的表格模型、單元繪制器或單元編輯器。類AbstractListModel用來定制用戶自己的表格模型。創(chuàng)建JTable的表格對象時,將捆綁定制的表格模型。例如:

JTabletable=newJTable(dataModel);//dataModel是定制的表格模型對象

JScrollPanescrollpane=newJScrollPane(table);//將表格添加到可滾動的面板2.類AbstractTableModel

類AbstractTableModel,提供了TableModel接口中絕大多數(shù)方法的缺省實現(xiàn)。類AbstractTableModel隸屬于javax.swing.table。該類是一個抽象類,沒有完全實現(xiàn),不能實例化,使用時必須在程序中實現(xiàn)方法。要想生成一個具體的TableModel作為AbstractTableMode的子類,至少必須實現(xiàn)下面以下三個方法:

publicintgetRowCount();//得到表格的行數(shù)

publicintgetColumnCount();//得到表格的行數(shù)

publicObjectgetValueAt(introw,intcolumn);//得到表格的第row行、第column列的單元值2.類AbstractTableModel(續(xù))例如,我們可以建立一個簡單二維表(

溫馨提示

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

評論

0/150

提交評論