MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元11 Java+MySQL 人力資源管理系統(tǒng)開發(fā)綜合實例_第1頁
MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元11 Java+MySQL 人力資源管理系統(tǒng)開發(fā)綜合實例_第2頁
MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元11 Java+MySQL 人力資源管理系統(tǒng)開發(fā)綜合實例_第3頁
MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元11 Java+MySQL 人力資源管理系統(tǒng)開發(fā)綜合實例_第4頁
MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元11 Java+MySQL 人力資源管理系統(tǒng)開發(fā)綜合實例_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單元11Java+MySQL人力資源管理系統(tǒng)開發(fā)綜合實例《MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(慕課版)》學(xué)習(xí)內(nèi)容任務(wù)1數(shù)據(jù)類型任務(wù)4物理結(jié)構(gòu)設(shè)計數(shù)據(jù)庫系統(tǒng)的組成任務(wù)6游標(biāo)任務(wù)2概念結(jié)構(gòu)設(shè)計任務(wù)3邏輯結(jié)構(gòu)設(shè)計任務(wù)1需求分析任務(wù)5數(shù)據(jù)庫實施任務(wù)1需求分析數(shù)據(jù)庫設(shè)計是數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)的重要環(huán)節(jié)。數(shù)據(jù)庫設(shè)計分為需求分析、概念設(shè)計、詳細設(shè)計及物理設(shè)計四階段。數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)設(shè)計,先要作用戶需求分析。

需求分析主要分析客戶的業(yè)務(wù)和數(shù)據(jù)處理需求,通過需求分析對需要存儲的數(shù)據(jù)進行收集和整理,并建立完整的數(shù)據(jù)集。收集數(shù)據(jù)的方法有:找相關(guān)人員作開會調(diào)查、發(fā)用戶調(diào)查表、查閱歷史資料數(shù)據(jù)、跟班作業(yè)、實際觀摩工作業(yè)務(wù)流程、編制各種實用報表等。

任務(wù)1需求分析數(shù)據(jù)字典:是指對數(shù)據(jù)的數(shù)據(jù)項、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、數(shù)據(jù)存儲、處理邏輯等進行定義和描述,其目的是對數(shù)據(jù)流圖中的各個元素作出詳細的說明,使用數(shù)據(jù)字典為簡單的建模項目。簡而言之,數(shù)據(jù)字典是描述數(shù)據(jù)的信息集合,是對系統(tǒng)中使用的所有數(shù)據(jù)元素的定義的集合。系統(tǒng)數(shù)據(jù)流圖:需求分析生成的結(jié)果有:數(shù)據(jù)字典、數(shù)據(jù)流圖、判定表和判定樹等。任務(wù)1需求分析系統(tǒng)功能結(jié)構(gòu)圖任務(wù)2概念結(jié)構(gòu)設(shè)計1.概念結(jié)構(gòu)設(shè)計概念結(jié)構(gòu)設(shè)計就是對信息世界進行建模,常用的概念模型是E-R模型。概念結(jié)構(gòu)設(shè)計的任務(wù)是在需求分析階段產(chǎn)生的需求說明書的基礎(chǔ)上,按照特定的方法把它們抽象為一個不依賴于任何具體機器的數(shù)據(jù)模型,即概念模型。在需求分析的基礎(chǔ)上,得到實體、屬性及聯(lián)系的E-R圖。雇員實體及屬性表示如圖雇員編號姓名部門編號電話…任務(wù)2概念結(jié)構(gòu)設(shè)計2.實體間的聯(lián)系1:1一對一1:m一對多m:n多對多任務(wù)3邏輯結(jié)構(gòu)設(shè)計1.關(guān)系模型設(shè)計邏輯結(jié)構(gòu)的設(shè)計是要求把概念結(jié)構(gòu)設(shè)計的結(jié)果轉(zhuǎn)換成所選用的數(shù)據(jù)庫管理系統(tǒng)所支持的特定類型的邏輯模型,關(guān)系模型是最流行的邏輯模型,它用表來表示實體和實體間的聯(lián)系。根據(jù)概念結(jié)構(gòu)設(shè)計分析結(jié)果,運用E-R圖到關(guān)系模式的轉(zhuǎn)換方法:一個實體型轉(zhuǎn)換為一個關(guān)系模式,實體型中的屬性轉(zhuǎn)換為關(guān)系模式的屬性,實體型的主碼轉(zhuǎn)換為關(guān)系模式的關(guān)鍵字,用下劃線加以標(biāo)識,其中E-R圖中的聯(lián)系也要轉(zhuǎn)換為關(guān)系模式,轉(zhuǎn)換方法是:一對一的聯(lián)系可轉(zhuǎn)為單個關(guān)系模式,也可與任意一端的實體型轉(zhuǎn)換成的關(guān)系合并,一對多的聯(lián)系可轉(zhuǎn)換為單個關(guān)系模式,也可與多端的實體型轉(zhuǎn)換成的關(guān)系模式合并,多對多、三個及以上的聯(lián)系只能轉(zhuǎn)為單個關(guān)系模式。如雇員關(guān)系模式:雇員信息表(雇員編號,雇員名,雇員姓,郵箱,電話,入職日期,崗位編號,工資,獎金,所在部門)任務(wù)3邏輯結(jié)構(gòu)設(shè)計2.對關(guān)系模式集合進行規(guī)范化處理范式是符合某一種級別的關(guān)系模式的集合,關(guān)系數(shù)據(jù)庫中的關(guān)系須滿足不同的范式,目前關(guān)系數(shù)據(jù)庫有6種范式。第一范式(1NF),第二范式(2NF),第三范式(3NF),BCNF(BC范式),第四范式(4NF),第五范式(5NF)。

第一范式指表的每一列是不可再分的數(shù)據(jù)項,同一列中不可有多個值,不能存在相同的兩行要求。任何一個關(guān)系數(shù)據(jù)庫中第一范式是對關(guān)系模式的基本要求,不滿足第一范式的數(shù)據(jù)庫不是關(guān)系數(shù)據(jù)庫。

第二范式是建立在第一范式的基礎(chǔ)上的,第二范式要求實體的屬性完全依賴于主屬性,即不能存在僅依賴主屬性的一部分,若存在那么這個屬性的主屬性的這一部分就要分解成一個新的實體。

第三范式的建立,要求滿足第三范式的數(shù)據(jù)庫表中不包含在其他表中已包含的非主鍵信息,即第三范式是屬性不依賴于其他非主屬性,也就是不存在傳遞依賴。任務(wù)3邏輯結(jié)構(gòu)設(shè)計3.確定數(shù)據(jù)表和表中的列

根據(jù)上述分析結(jié)果得出人力資源管理的數(shù)據(jù)表結(jié)構(gòu),還需要為表中字段添加一些描述,如字段數(shù)據(jù)類型、約束等。雇員基本信息表,其它信息表略。

表11-1字段名雇員編號雇員名雇員姓郵箱電話入職日期崗位編號工資傭金比部門編號部門經(jīng)理編號英文Employee_idFirst_nameLast_nameemailPhone_numberHire_dateJob_idsalaryCommision_pctDepartment——idManager_id數(shù)據(jù)類型整型變長字符變長字符變長字符變長字符日期變長字符整型整型整型整型是否空NYNNYNNYYNN主鍵否YNNNNNNNNNN任務(wù)4物理結(jié)構(gòu)設(shè)計1.物理結(jié)構(gòu)設(shè)計物理設(shè)計主要包括存儲記錄結(jié)構(gòu)的設(shè)計、數(shù)據(jù)存放位置、存取方法、完整性及安全性和應(yīng)用程序等的設(shè)計,當(dāng)有前階段運用范式對關(guān)系模式的規(guī)范化處理后,降低了關(guān)系模式的冗余,消除了數(shù)據(jù)依賴不合理因素,使關(guān)系模式達到了一定程度的分離,接下來就是選用合適的數(shù)據(jù)庫管理系統(tǒng)(如MySQL)。任務(wù)5數(shù)據(jù)庫實施11.5.1創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表創(chuàng)建的腳本createdatabasehr;usehr;CREATETABLE`hr`.`departments`(`department_id`int(4)NOTNULLCOMMENT'部門編號',`department_name`varchar(30)NOTNULLCOMMENT'部門名稱',`manager_id`int(6)NULLCOMMENT'經(jīng)理編號',`location_id`int(4)NULL,PRIMARYKEY(`department_id`));任務(wù)5數(shù)據(jù)庫實施CREATETABLE`hr`.`employees`(`employee_id`int(6)NOTNULLCOMMENT'員工號',`first_name`varchar(20)NULLCOMMENT'名',`last_name`varchar(25)NOTNULLCOMMENT'姓',`email`varchar(25)NOTNULLCOMMENT'電子郵箱',`phone_number`char(20)NULLCOMMENT'手機號',`hire_date`dateNOTNULLCOMMENT'聘用日期',`job_id`varchar(10)NOTNULLCOMMENT'工作號',`salary`decimal(8,2)NULLCOMMENT'工資',`commision_pic`decimal(2,2)NULLCOMMENT'傭金比',`manager_id`int(6)NULLCOMMENT'經(jīng)理編號',`department_id`int(4)NULLCOMMENT'部門編號',PRIMARYKEY(`employee_id`));任務(wù)5數(shù)據(jù)庫實施CREATETABLE`hr`.`jobs`(`job_id`varchar(10)NOTNULLCOMMENT'工作號',`job_title`varchar(35)NOTNULLCOMMENT'工作名',`min_salary`int(6)NULLCOMMENT'最低工資',`max_salary`int(6)NULLCOMMENT'最高工資',PRIMARYKEY(`job_id`));CREATETABLE`hr`.`job_history`(`employee_id`int(6)NOTNULLCOMMENT'員工號',`start_date`dateNOTNULLCOMMENT'入職時間',`end_date`dateNOTNULLCOMMENT'離職時間',`job_id`int(10)NOTNULLCOMMENT'工作號',`department_id`int(4)NULLCOMMENT'部門編號',PRIMARYKEY(`employee_id`));任務(wù)5數(shù)據(jù)庫實施CREATETABLE`hr`.`locations`(`location_id`int(4)NOTNULLCOMMENT'位置號',`street_address`varchar(40)NULLCOMMENT'街區(qū)地址',`postal_code`varchar(12)NULLCOMMENT'郵編',`city`varchar(30)NOTNULLCOMMENT'城市',`state_province`varchar(25)NULLCOMMENT'省市',`country_id`char(2)NULLCOMMENT'國家編號',PRIMARYKEY(`location_id`));

任務(wù)5數(shù)據(jù)庫實施CREATETABLE`hr`.`regions`(`region_id`int(2)NOTNULLCOMMENT'地區(qū)編號',`region_name`varchar(25)NULLCOMMENT'地區(qū)名',PRIMARYKEY(`region_id`));

CREATETABLE`hr`.`countries`(`country_id`char(2)NOTNULLCOMMENT'國家編號',`country_name`varchar(30)NOTNULLCOMMENT'國家名',`region_id`int(2)NOTNULLCOMMENT'地區(qū)編號',PRIMARYKEY(`country_id`));任務(wù)5數(shù)據(jù)庫實施參照附錄“人力資源數(shù)據(jù)庫(HR)的表數(shù)據(jù)”,添加樣本數(shù)據(jù)到數(shù)據(jù)表中。部分樣本數(shù)據(jù)添加如下。INSERTINTOemployees(employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,department_id)VALUES(100,'Steven','King','SKING','515.123.4567','1987-06-17','AD_PRES',24000,90);INSERTINTO`employees`VALUES(101,'Neena','Kochhar','NKOCHHAR','515.123.4568','1989-09-21','AD_VP',17000.00,NULL,100,90);INSERTINTO`countries`VALUES('AR','Argentina',2);INSERTINTO`countries`VALUES('AU','Australia',3);INSERTINTO`countries`VALUES('BE','Belgium',1);INSERTINTO`departments`VALUES(10,'Administration',200,1700);INSERTINTO`departments`VALUES(20,'Marketing',201,1800);INSERTINTO`departments`VALUES(30,'Purchasing',114,1700);任務(wù)5數(shù)據(jù)庫實施11.5.2存儲過程創(chuàng)建運用存儲過程查詢員工信息,當(dāng)輸入員工的編號時,顯示該員工的信息。這里運用帶參數(shù)的存儲過程,將員工編號作為一個輸入型參數(shù)。代碼如下。CREATEDEFINER=`root`@`localhost`PROCEDURE`pro_cx`(inbhint)begindeclarebhintdefault0;select*fromemployeeswhereemployee_id=@bh;end;測試雇員編號為100的雇員情況,調(diào)用如下。Callpro_cx(100);任務(wù)5數(shù)據(jù)庫實施11.5.3數(shù)據(jù)庫應(yīng)用程序開發(fā)(1)啟動Eclipse(2)選擇菜單命令“File”|“New”|“JavaProject”,打開“NewJavaProject”新建一個工程的對話框,在該對話框projectname的文本框中輸入“MyProj”,得到名稱為MyProj的Java工程,如圖11-9;1.創(chuàng)建Java工程(3)創(chuàng)建Java應(yīng)用程序一個Java應(yīng)用程序可包含多個類,但有且僅有一個類包含main()方法,它是作為程序的入口,在此先建一個類,以測試對數(shù)據(jù)庫的通訊連接圖11-92.連接數(shù)據(jù)庫importjava.sql.*;publicclassHrMysqlJdbc{ publicstaticvoidmain(String[]args){ try{ Class.forName("com.mysql.cj.jdbc.Driver");//1.加載驅(qū)動

System.out.println("JDBC驅(qū)動程序加載成功"); } catch(Exceptione){ System.out.print("JDBC驅(qū)動程序加載失敗"); e.printStackTrace(); } try{

任務(wù)5數(shù)據(jù)庫實施 //2.獲取連接對象

Connectionconnect=DriverManager.getConnection( "jdbc:mysql://localhost:3306/HR?serverTimezone=UTC&useSSL=false","root","root"); System.out.println("成功連接數(shù)據(jù)庫");任務(wù)5數(shù)據(jù)庫實施 //3.創(chuàng)建createStatement對象

Statementstmt=connect.createStatement();//數(shù)據(jù)源注意IP地址和端口號,數(shù)據(jù)庫名字

try{ Class.forName(connectDB);//加載數(shù)據(jù)庫引擎,返回給定字符串名的類

}catch(ClassNotFoundExceptione){ //e.printStackTrace(); System.out.println("加載數(shù)據(jù)庫引擎失敗"); System.exit(0); } System.out.println("數(shù)據(jù)庫驅(qū)動成功");任務(wù)5數(shù)據(jù)庫實施任務(wù)5數(shù)據(jù)庫實施try{ Stringuser="root";//你自己創(chuàng)建的用戶名字和密碼?。?/p>

Stringpassword="root"; Connectioncon=DriverManager.getConnection(connectDB,user,password);//連接數(shù)據(jù)庫對象

System.out.println("連接數(shù)據(jù)庫成功"); Statementstmt=con.createStatement();//創(chuàng)建SQL命令對象

//創(chuàng)建表

System.out.println("查詢"); System.out.println("開始讀取數(shù)據(jù)"); ResultSetrs=stmt.executeQuery("SELECT*FROMemployees");//返回SQL語句查詢結(jié)果集(集合)任務(wù)5數(shù)據(jù)庫實施//循環(huán)輸出每一條記錄 System.out.println("雇員編號 \t雇員名\t雇員姓\t郵箱\t電話\t\t入職日期\t\t\t崗位編號\t\t工資\t獎金\t部門編號\t部門經(jīng)理編號"); while(rs.next()){ //輸出每個字段 System.out.println("employee_id"+"\t"+rs.getString("first_name")+"\t"+rs.getString("last_name")+"\t"+rs.getString("email")+"\t"+rs.getString("phone_int")+"\t"+rs.getString("hire_smalldatetime")+"\t"+rs.getString("job_id")+"\t"+rs.getString("salary")+"\t"+rs.getString("commission_PCT")+"\t"+rs.getString("manager_id")+"\t"+rs.getString("department_id")+"\t");任務(wù)5數(shù)據(jù)庫實施 } System.out.println("讀取完畢"); //關(guān)閉連接

stmt.close();//關(guān)閉命令對象連接

con.close();//關(guān)閉數(shù)據(jù)庫連接

}catch(SQLExceptione){ e.printStackTrace(); //System.out.println("數(shù)據(jù)庫連接錯誤"); System.exit(0); } }3.運行程序右擊所建類名,選RunAs|JavaApplication命令,得到如下運行結(jié)果任務(wù)5數(shù)據(jù)庫實施1.JDBC概述JDBC全稱是Java數(shù)據(jù)庫連接(javadatabaseconnectivity),它是一套用于執(zhí)行SQL語句的JAVAAPI,應(yīng)用程序可通過這套JAVAAPI連接到關(guān)系數(shù)據(jù)庫,使用SQL語句完成對數(shù)據(jù)庫中數(shù)據(jù)的查詢、增加、修改和刪除等操作。任務(wù)5數(shù)據(jù)庫實施11.5.4JDBC數(shù)據(jù)訪問Java應(yīng)用程序與數(shù)據(jù)庫的連接方式如圖11-11所示。不同數(shù)據(jù)庫(如MYSQL或ORACLE等)處理數(shù)據(jù)的方式不同,若直接使用數(shù)據(jù)庫廠商提供的訪問接口操作數(shù)據(jù)庫,應(yīng)用程序的可移植性較差。如用戶在當(dāng)前程序中使用的是MYSQL提供的接口操作數(shù)據(jù)庫,如果換用ORACLE數(shù)據(jù)庫,就要重新使用ORACLE數(shù)據(jù)庫提供的接口,編碼需要做較大的修改。如果使用JDBC就很方便移植,因為JDBC要求各數(shù)據(jù)庫廠商按統(tǒng)一的規(guī)范提供數(shù)據(jù)庫驅(qū)動程序,在程序中由JDBC和具體的數(shù)據(jù)庫驅(qū)動程序聯(lián)系,用戶不必直接與底層數(shù)據(jù)庫交互,這樣使得代碼的通用性增強。任務(wù)5數(shù)據(jù)庫實施JDBC具有如下功能。(1)與數(shù)據(jù)庫建立連接;(2)發(fā)送SQL語句;(3)處理結(jié)果。圖11-11Java應(yīng)用程序與數(shù)據(jù)庫的連接方式任務(wù)5數(shù)據(jù)庫實施2.加載JDBC驅(qū)動程序

在連接數(shù)據(jù)庫之前,首先要加載想要連接的數(shù)據(jù)庫的驅(qū)動到JVM(Java虛擬機),這通過java.lang.Class類的靜態(tài)方法forName(StringclassName)實現(xiàn)。例如:try{ Class.forName(driverName); System.out.println("加載驅(qū)動成功!");}catch(Exceptione){ e.printStackTrace(); System.out.println("加載驅(qū)動失??!");}成功加載后,會將Driver類的實例注冊到DriverManager類中。任務(wù)5數(shù)據(jù)庫實施3.提供JDBC連接的URL

JDBCURL提供了一種標(biāo)識數(shù)據(jù)庫的方法,可以使相應(yīng)的驅(qū)動程序能識別該數(shù)據(jù)庫并與之建立連接。實際上,驅(qū)動程序編程員將決定用什么JDBCURL來標(biāo)識特定的驅(qū)動程序。用戶不必關(guān)心如何來形成JDBCURL,他們只須使用與所用的驅(qū)動程序一起提供的URL即可。JDBC的作用是提供某些約定,驅(qū)動程序編程員在構(gòu)造他們的JDBCURL時應(yīng)該遵循這些約定。任務(wù)5數(shù)據(jù)庫實施

4.創(chuàng)建數(shù)據(jù)庫的連接

要連接數(shù)據(jù)庫,需要向java.sql.DriverManager請求并獲得Connection對象,該對象代表一個數(shù)據(jù)庫的連接。

使用DriverManager的getConnectin(Stringurl,Stringusername,Stringpassword)方法傳入指定的欲連接的數(shù)據(jù)庫的路徑、數(shù)據(jù)庫的用戶名和密碼。例如:

try{

ConnectiondbConn=DriverManager.getConnection(dbURL,userName,userPwd); System.out.println("連接數(shù)據(jù)庫成功!");}catch(Exceptione){ e.printStackTrace(); System.out.print("SQLServer連接失??!");}

任務(wù)5數(shù)據(jù)庫實施5.創(chuàng)建一個Statement對象

要執(zhí)行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型。

(1)執(zhí)行靜態(tài)SQL語句。通常通過Statement實例實現(xiàn)。

(2)執(zhí)行動態(tài)SQL語句。通常通過PreparedStatement實例實現(xiàn)。

(3)執(zhí)行數(shù)據(jù)庫存儲過程。通常通過CallableStatement實例實現(xiàn)。

具體的實現(xiàn)方式如下。

Statementstmt=con.createStatement();PreparedStatementpstmt=con.prepareStatement(sql);CallableStatementcstmt=con.prepareCall(“{CALLdemoSp(?,?)}”);

任務(wù)5數(shù)據(jù)庫實施6.執(zhí)行SQL語句

Statement接口提供了三種執(zhí)行SQL語句的方法:executeQuery、executeUpdate和exec

溫馨提示

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

評論

0/150

提交評論