




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
教學目標14.1JDBC技術JDBC的體系結構JDBCAPI的主要類和接口簡介14.2創建MySQL的數據庫MySQL的安裝和配置創建數據庫study14.3Java應用程序通過JDBC存取數據庫的過程應用JDBC存取數據庫的步驟創建MyEclipse的項目實例:完成JDBC訪問MySQL數據庫study教學目標(續)14.4JDBC中的主要接口和類DriverManager類連接SQLServer、Oracle和Access數據庫的程序舉例Connection接口Statement接口PreparedStatement接口CallableStatement
接口與Java執行MySQL存儲過程的程序舉例Java數據類型和SQL中支持的數據類型的對應關系ResultSet接口ResultSetMetaData接口DatabaseMetaData接口教學目標(續)14.5基于C/S模式的學生信息數據庫管理系統的開發創建實體層Bean創建數據庫訪問層:插入、修改、刪除和瀏覽創建用戶圖形界面層14.6JTable組件與應用實例:以表格形式顯示數據庫內容14.1JDBC技術Java程序使用JDBC(JavaDatabaseConnectivity)API與數據庫進行通信14.1.1JDBC的體系結構Java應用程序JDBCAPIJDBCDriverManager數據庫驅動器Java應用程序數據庫數據庫數據庫Java應用程序圖14-1JDBC的體系結構14.1.2JDBC驅動程序類型1.JDBC-ODBCbridgeplusODBCdriver(類型1):JDBC-ODBC橋接驅動程序。其底層通過ODBC(OpendatabasConnectivity)驅動程序來連接數據庫。2.Native-APIpartly-Javadriver(類型2):本地API-部份用Java來編寫的驅動程序。此種方式先將JDBC函數調用轉換成數據庫客戶端函數庫的API(位于客戶端計算機),然后與數據庫相連。3.JDBC-NetpureJavadriver(類型3):JDBC網絡純Java驅動程序。首先JDBC驅動程序會將JDBC函數調用解釋成與數據庫無關的網絡通信協議,經過中介服務器的第二次解析,最后才轉換成相對應的數據庫通信協議.4.Native-protocolpureJavadriver(類型4)本地協議純Java驅動程序。這種驅動程序將JDBC調用直接轉換為DBMS所使用的網絡協議。14.1.3JDBCAPI的主要類和接口簡介JDBCAPI由一系列與數據庫訪問有關的類和接口組成,它們放在java.sql子包中。其中主要的類和接口有:DriverManager類:
Connection接口
Statement接口、與子類PreparedStatement、CallableStatement;ResultSet;CallableStatement接口
14.2創建MySQL的數據庫MySQL的特點:最受歡迎的開源關系數據庫管理系統,由瑞典MySQLAB公司開發,目前屬于Oracle公司。MySQL被廣泛地應用在Internet的中小型網站,具備體積小、速度快、總體擁有成本低,開放源碼MySQL使用結構化查詢語言SQL進行數據庫管理和操作。免費下載網址:/downloads/14.2.1MySQL的安裝和配置
1.下載Windows版的安裝軟件包:(1)MySql數據庫管理軟件:
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桌面出現程序項:
“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,安裝完成后程序項出現:
單擊“MySqlAdministrator”,將進入MySQL的圖形化管理界面14.2.1MySQL的安裝和配置
2.安裝和配置MySql軟件
單擊“MySqlAdministrator”,將進入MySQL的圖形化管理界面:14.2.1MySQL的安裝和配置
2.安裝和配置MySql軟件
單擊“MySqlAdministrator”,將進入MySQL的圖形化管理界面:14.2.2創建數據庫study
數據庫Study存放著三張表student,course,sc:學生的基本信息student:學號、姓名、性別、年齡和所在系各字段組成;課程情況表course:課程號、課程名和學分各字段組成;學生學習各門課程的學習成績sc:學號、課程號和學習成績各字段組成。createdatabasestudy;usestudy;CREATETABLEcourse( cnochar(2), cnamechar(16), creditdecimal(2,1));insertintocoursevalues('c1','數據庫',4);insertintocoursevalues('c2','數學', 2.5);insertintocoursevalues('c3','信息系統',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創建數據庫study
將study.sql文件拷貝到C盤根目錄下,打開MySQLCommandLineClient,運行腳本命令:
sourcec:\study.sql14.3Java應用程序通過JDBC存取數據庫的過程
本節首先介紹通過JDBC存取數據庫的步驟,然后通過一個簡單實例演示整個過程。14.3.1應用JDBC存取數據庫的步驟Java應用程序通過JDBC存取數據庫的步驟:
1.加載JDBC驅動程序,建立數據庫連接
2.建立與執行SQL語句
3.處理結果集
4.關閉數據庫連接1.加載JDBC驅動程序,建立數據庫連接。加載JDBC驅動程序,語句格式:
Class.forName(Stringjdbc_driver);
例如:加載MySQL驅動程序的語句:
Class.forName("com.mysql.jdbc.Driver");使用DriverManger.getConnection(),建立一個新的數據庫連接。方法格式:
ConnnetiongetConnection(StringconnURl,
StringloginName,Stringpassword);返回連接到特定數據庫的Connnetion對象。connURl用來定義連接數據庫的參數。
1.加載JDBC驅動程序,建立數據庫連接。例14-1連接MySQL的數據庫Study,用戶名為”root”,口令為“root”。則建立數據庫連接代碼: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語句對象,執行查詢
建立新數據庫連接以后,必須先建立一個Statement對象才能執行SQL語句。
3種類型的Statememt:Statement、PreparedStatement和CallableStatement。
(1)使用Statement。示例如下:
StatementStmt=conn.createStatement();StringsqlQuery=“select*fromEmployee”;
ResultSetrs=Stmt.executeQuery(sqlQuery);2.建立SQL語句對象,執行查詢(續)(2)使用PreparedStatement
用于處理預編譯的SQL語句,可重復執行。
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語句對象,執行查詢(續)執行帶2個參數的UPDATE語句,示例如下:
PreparedStatementprepStmt=conn.prepareStatement("UPDATEempSETsal=?WHEREename=?");prepStmt.setInt(1,100000);prepStmt.setString(2,"Rich");
prepStmt.executeUpdate();3.建立SQL語句對象,執行查詢(續)(3)CallableStatement:調用數據庫的存儲過程,語法:
CallableStatement變量名=conn.prepareCall(“call存儲過程名稱”);示例:
CallableStatementcallStmt=conn.prepareCall("callupdate_salary(?,?)");
callStmt.setInt(1,7788);//設置要傳入的第一個輸入參數(?)值是7788callStmt.setInt(2,10000);
//設置要傳入的第二個輸入參數(?)值是10000
callStmt.execute();2.建立SQL語句對象,執行查詢(續)
建立了Statement或PreparedStatement或CallableStatement對象之后,3種方法執行SQL語句:
executeQuery():執行select的SQL查詢語句
executeUpdate():執行insert、delete、update更新語句,以及DDL語句。
execute():執行SQL語句。2.建立SQL語句對象,執行查詢(續)//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循環打印出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.關閉數據庫連接通過JDBC存取數據庫時最后一個操作是關閉Connection、Statement、ResultSet等對象.rs.close();
stmt.close();con.close();14.3.2創建MyEclipse的項目實例:
完成JDBC訪問MySQL數據庫study
例14-2通過JDBC存取study數據庫的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驅動程序 //通過數據庫連接
conn=DriverManager.getConnection(url,username,password); //建立SQL語句對象
Statementstatement=conn.createStatement(); StringsqlQuery="select*fromcourse"; ResultSetrs=statement.executeQuery(sqlQuery);//執行查詢
while(rs.next()){//處理結果集
System.out.print(rs.getString(1)+","); System.out.print(rs.getString(2)+","); System.out.println(rs.getInt(3)); }
//關閉數據庫連接
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,數據庫,4c2,數學,2.5c3,信息系統,4c4,英語,314.3.2創建MyEclipse的項目實例:
完成JDBC訪問MySQL數據庫study在MyEclipse環境下,項目ch14的創建過程:(1)在MyEclipse環境下,創建JavaProject,起名為ch14。(2)為項目ch14的庫文件[libraries]添加MySQL的JDBC驅動程序包:mysql-connector-java.jar;(3)在項目ch14中,創建類文件JdbcExample.java,輸入正確的文件內容.(4)運行項目的Java應用程序。得到運行結果14.4JDBC中的主要接口和類Java應用程序訪問數據庫主要是通過JDBCAPI實現的,通過下面幾個重要接口和類:
DriverManager類
連接SQLServer、Oracle和Access數據庫的程序舉例
Connection接口
Statement接口
PreparedStatement接口
CallableStatement接口
ResultSet接口
ResultSetMetaData接口
DatabaseMetaData接口
Java的基本數據類型和SQL中支持的數據類型對應關系。14.4.1DriverManager類DriverManager類在包java.sql,用于數據庫驅動程序管理的類,在數據庫和相應驅動程序之間建立連接,也處理諸如驅動程序登錄時間限制及登錄和跟蹤消息的顯示等事務。
DriverManager類的主要成員方法:
static
Connection
getConnection(String
url);static
Connection
getConnection(String
url,String
user,String
password):14.4.2連接SQLServer、Oracle和Access數據庫的程序舉例
例14-3
通過創建好的數據源名studyDSN,連接MicrosoftSQLServer2008或SQLServer2008express的數據庫。創建ODBC數據源:用window控制面板中數據源“ODBC”管理器,創建一個連接到SQLServer的數據源,名稱為studyDSN,連接的數據庫是study,用戶為sa,口令為sa。創建好的數據源名studyDSN在下列程序中使用:14.4.2連接SQLServer、Oracle和Access數據庫的程序舉例
例14-3
實現代碼如下: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數據庫的程序舉例
例14-4通過JDBC-ODBC驅動程序連接SQLServer2008express版本。但不必事先建立ODBC的數據源名。省略了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數據庫的程序舉例
例14-5從網站下載SQLServer2005或SQLServer2008的sqljdbc_2.0驅動程序包sqljdbc4.jar,并將此包放在用戶應用能訪問的類路徑或項目的庫路徑中。機器名為localhost(本地機器),端口號為1030,數據庫為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數據庫的程序舉例
例14-6連接Oracle數據庫。從網站下載Oracle驅動程序包classes12.zip,并將此包的路徑放在classpath環境變量中或放在項目的庫路徑中。連接數據庫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的數據庫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接口是用來表示數據庫連接的對象,對數據庫的一切操作都是在這個連接的基礎上進行的。Connection接口的成員常用方法:(1)StatementcreateStatement():創建一個statement對象;
(2)
PreparedStatement
prepareStatement(String
sql)
創建PreparedStatement類對象;
(3)
voidclose():
立即釋放連接對象的數據庫和JDBC資源;14.4.4Statement接口Statement接口用于在已經建立的連接的基礎上向數據庫發送SQL語句的對象。3種類型的Statement對象:Statement對象用于執行不帶參數的簡單SQL語句;PreparedStatement對象用于執行帶或不帶IN參數的預編譯SQL語句;CallableStatement對象用于執行對數據庫已存儲過程的調用。14.4.4Statement接口創建statement對象的方法如下:
Statementstmt=conn.createStatement();
Statement接口定義中包括的常用方法:
(1)ResultSet
executeQuery(String
sql)
使用SELECT命令對數據庫進行查詢,返回結果集;
(2)
int
executeUpdate(String
sql):
使用INSERT、DELETE、UPDATE對數據庫進行新增、刪除和修改記錄操作;
(3)booleanexecute(Stringsql):執行SQL語句;
(4)void
close():結束Statement類對象對數據庫的聯機;
14.4.5PreparedStatement接口
PreparedStatement接口和Statement類的不同之處在于PreparedStatement類對象會將傳入的SQL命令事先編好等待使用,當有單一的SQL指令需多次執行時,用PreparedStatement會比Statement效率更高。
PreparedStatement接口的常用方法:
(1) ResultSetexecuteQuery():使用SELECT命令對數據庫進行查詢;
(2) intexecuteUpdate()
:使用INSERT\DELETE\UPDATE對數據庫進行新增、刪除和修改操作;
(3)voidsetXXX(intparameterIndex,XXXx):給PreparedStatement類對象的IN參數設定為XXX類型的值x。
14.4.5PreparedStatement接口
PreparedStatement對象的創建方法:
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執行MySQL存儲過程的程序舉例CallableStatement接口用于執行對數據庫的存儲過程。創建
CallableStatement對象的方法如下:
CallableStatementcstmt=con.prepareCall("callprocedure_name(?,?,?,…)");
其中(?,?,?,…)定義了存儲過程的輸入參數和(或)輸出參數。setXXX方法:向存儲過程傳遞輸入參數(IN)值的。registerOutParameter方法:設置存儲過程的OUT(輸出)參數,getXXX方法:獲取調用存儲過程后的輸出參數的值結果。
14.4.6CallableStatement
接口
與Java執行MySQL存儲過程的程序舉例例14-8利用JDBC接口調用Mysql的存儲過程Query_Student和Query_Study1。打開MySQlCommandClientLine窗口,在數據庫study中創建存儲過程Query_Student和Query_Study1。定義不帶參數的存儲過程Query_Study1:usestudy;DELIMITER//CREATEPROCEDUREQuery_Study1()BEGINSELECTsname,sdept,sageFROMstudent;END//例14-8利用JDBC接口調用Mysql的存儲過程Query_Student和Query_Study1。創建存儲過程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的主要代碼:
//帶有入口參數和出口參數的存儲過程的調用,select的結果是單值
CallableStatementcallStmt=conn.prepareCall("{callQuery_Student(?,?,?)}");//設置要傳入的第一個輸入參數(?)值是20001callStmt.setString(1,"20001");//注冊輸出參數
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數據類型
和SQL中支持的數據類型的對應關系Java的基本數據類型和SQL中支持的數據類型有一定的對應關系。這種對應關系如表14-1所示(請參見本書)。14.4.8ResultSet接口
結果集(ResultSet):存儲SQL查詢結果的對象,通過維護記錄指針(Cursor)的移動,能操作結果集中的每一行記錄;提供一組方法對數據庫進行新增、刪除和修改操作。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接口保存了數據庫的所有特性,并且提供許多方法來取得這些信息。
DatabaseMetaData類的主要方法(請參見本書)
14.5基于C/S模式的學生信息數據庫管理系統的開例14-9利用MySQl的數據庫Study,對數據庫中表student進行插入、修改、刪除和瀏覽。分為三層結構(從上層到下層):第1層:視圖層(用戶界面層):用于管理信息的顯示,是與用戶交互的圖形界面。第2層:數據庫訪問層:完成與數據庫的所有操作。第3層:實體層:對數據庫的每個對象基表,都定義了Java中對應的實體類。14.5基于C/S模式的學生信息數據庫管理系統的開例14-9利用MySQl的數據庫Study,對數據庫中表student進行插入、修改、刪除和瀏覽。14.5.1創建實體層Bean
對Study數據庫中的表Student完成輸入、修改、刪除的Java程序。這三個程序有相似的GUI,因此聲明類StudentUI以封裝該GUI。例13-2對Study數據庫中的表Student完成增加記錄的程序設計。程序由兩個類AddStudentFrame和StudentUI組成。將StudentUI類放在子包UI中;在類AddStudentFrame中,用語句importUI.StudentUI;導入子包中類StudentUI。14.5.1創建實體層Bean對Study數據庫中的表student,編寫對應的實體類Student.java:publicclassStudent{
privateStringsno; privateStringsname; privateStringssex; privateintsage;
privateStringSdept; publicStringgetSno(){ returnsno; } publicvoidsetSno(Stringsno){ this.sno=sno; }.......14.5.2創建數據庫訪問層:插入、修改、刪除和瀏覽
訪問數據庫層:由StudentManager.java和DBConnection.Java組成。
1.DBConnection類的設計:定義了訪問MySql數據庫的打開連接和關閉操作,如果要連接其它類型的數據庫,只要修改類的變量driverClassName和url的值,而不影響系統的其他代碼。14.5.2創建數據庫訪問層:插入、修改、刪除和瀏覽
2.StudentManager.java類的程序設計:封裝了訪問student表的插入、修改、刪除和查詢操作。(1)繼承父類DBConnection:用于DB的連接和關閉(2)構造方法中調用父類的連接方法,即在創建StudentManager對象時完成連接數據庫操作。類的域變量Connectionconn在各方法中共享。(3)方法intexecUpdate(Stringsql):定義了對Student表進行更新操作,包括插入、修改、刪除。入口參數是SQL語句的字符串,返回更新操作的結果,返回結果大于0則更新成功,為0則更新不成功,并及時關閉數據庫連接。(4)方法List<Student>Query(StringsqlString):定義了對Student表查詢的結果,并以List結構返回查詢結果集,并及時關閉數據庫連接。14.5.3創建用戶圖形界面層:主窗口、主菜單、插入、修改、刪除和瀏覽
圖形界面層GUI:主類Main.java、主窗口主菜單MainFrame.java:Main主類完成創建學生管理系統的主窗口對象,并使主窗口顯示在屏幕居中。MainFrame.java定義了主窗口,在主窗口中創建顯示主菜單,并給各菜單項注冊事件監聽處理對象。插入記錄界面:AddStudentPanel.java修改記錄界面:UpdateStudentPanel刪除記錄界面:DeleteStudentPanel.java瀏覽學生信息界面:ListStudentsPanel.java公用界面StudentUI.java:定義了一個學生信息的顯示界面,可作為圖形組件被組合在插入、修改和刪除的圖形界面中。類StudentUI設計思路類StudentUI完成輸入記錄的畫面設計,其設計思路如下:(1)調用者利用StudentUI類構造方法的參數(字符型數組StringarrayString[]),傳遞輸入記錄畫面上一組列的標題。在StudentUI類構造方法中,從數組arrayString的實例變量arrayString.length中可得到列的個數,并取出列的標題放在labels數組。(2)定義一組文本字段fields[]用于編輯一張表的記錄各字段,并且調用者通過方法getFields()和setFields()可讀取和設置fields值。(3)類StudentUI界面上提供兩個通用Button按鈕doTask1、doTask2,按鈕的標簽內容和按鈕的事件處理過程,可通過調用者來設置。類StudentUI的程序代碼14.6JTable組件與應用實例:以表格形式顯示數據庫內容
以二維表格形式表現查詢結果:利用JTable表格類和AbstractTableModel表格模型類JTable類:以二維表的形式顯示表格中的數據從表格模型AbstractTableModel類的對象中獲取。1.類JTable
JTable組件屬于javax.swing包,它能以二維表的形式顯示數據。類JTable在顯示數據時具有以下特點:
(1)可定制性:可以定制數據的顯示方式和編輯狀態;
(2)異構性:可以顯示不同類型的數據對象,甚至包括顏色、圖標等復雜對象;(3)簡便性:可以以缺省方式輕松地建立起一個二維表。使用類JTable顯示數據之前,必須根據情況先生成定制的表格模型、單元繪制器或單元編輯器。類AbstractListModel用來定制用戶自己的表格模型。創建JTable的表格對象時,將捆綁定制的表格模型。例如:
JTabletable=newJTable(dataModel);//dataModel是定制的表格模型對象
JScrollPanescrollpane=newJScrollPane(table);//將表格添加到可滾動的面板2.類AbstractTableModel
類AbstractTableModel,提供了TableModel接口中絕大多數方法的缺省實現。類AbstractTableModel隸屬于javax.swing.table。該類是一個抽象類,沒有完全實現,不能實例化,使用時必須在程序中實現方法。要想生成一個具體的TableModel作為AbstractTableMode的子類,至少必須實現下面以下三個方法:
publicintgetRowCount();//得到表格的行數
publicintgetColumnCount();//得到表格的行數
publicObjectgetValueAt(introw,intcolumn);//得到表格的第row行、第column列的單元值2.類AbstractTableModel(續)例如,我們可以建立一個簡單二維表(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外交學院《信息技術在美術課件制作教學中的應用》2023-2024學年第二學期期末試卷
- 浙江省五校聯考2025年高二下生物期末統考模擬試題含解析
- 西南科技大學《微波技術與工程》2023-2024學年第二學期期末試卷
- 梧州學院《文獻檢索與科技創新》2023-2024學年第二學期期末試卷
- 深圳信息職業技術學院《日常烹飪與營養》2023-2024學年第二學期期末試卷
- 西交利物浦大學《燈光材質渲染》2023-2024學年第二學期期末試卷
- 中國石油大學(華東)《嵌入式系統理論》2023-2024學年第二學期期末試卷
- 西安航空學院《計算機網絡與因特網技術》2023-2024學年第二學期期末試卷
- 云南經濟管理學院《建材機械設計》2023-2024學年第二學期期末試卷
- 云南省玉溪市玉溪第一中學2024-2025學年數學高二下期末檢測試題含解析
- 2024-2025年全國初中化學競賽試卷及答案
- 2024年首都機場集團資產管理有限公司招聘筆試參考題庫含答案解析
- 生產異常管理課件
- 酒廠擴建可行性報告
- 售后服務中的客戶溝通和協商技巧
- 《紅樓夢》中賈母的智慧與權謀解析
- 醫療器械(耗材)項目投標服務投標方案(技術方案)
- GB/T 2077-2023硬質合金可轉位刀片圓角半徑
- 病理科危險化學品管理制度
- 二人相聲小品搞笑臺詞二人最搞笑的相聲臺詞
- 家具維保服務投標方案
評論
0/150
提交評論