版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元11Java+MySQL人力资源管理系统开发综合实例《MySQL数据库管理与应用任务式教程(慕课版)》学习内容任务1数据类型任务4物理结构设计数据库系统的组成任务6游标任务2概念结构设计任务3逻辑结构设计任务1需求分析任务5数据库实施任务1需求分析数据库设计是数据库应用系统开发的重要环节。数据库设计分为需求分析、概念设计、详细设计及物理设计四阶段。数据库应用系统开发设计,先要作用户需求分析。
需求分析主要分析客户的业务和数据处理需求,通过需求分析对需要存储的数据进行收集和整理,并建立完整的数据集。收集数据的方法有:找相关人员作开会调查、发用户调查表、查阅历史资料数据、跟班作业、实际观摩工作业务流程、编制各种实用报表等。
任务1需求分析数据字典:是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流图中的各个元素作出详细的说明,使用数据字典为简单的建模项目。简而言之,数据字典是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合。系统数据流图:需求分析生成的结果有:数据字典、数据流图、判定表和判定树等。任务1需求分析系统功能结构图任务2概念结构设计1.概念结构设计概念结构设计就是对信息世界进行建模,常用的概念模型是E-R模型。概念结构设计的任务是在需求分析阶段产生的需求说明书的基础上,按照特定的方法把它们抽象为一个不依赖于任何具体机器的数据模型,即概念模型。在需求分析的基础上,得到实体、属性及联系的E-R图。雇员实体及属性表示如图雇员编号姓名部门编号电话…任务2概念结构设计2.实体间的联系1:1一对一1:m一对多m:n多对多任务3逻辑结构设计1.关系模型设计逻辑结构的设计是要求把概念结构设计的结果转换成所选用的数据库管理系统所支持的特定类型的逻辑模型,关系模型是最流行的逻辑模型,它用表来表示实体和实体间的联系。根据概念结构设计分析结果,运用E-R图到关系模式的转换方法:一个实体型转换为一个关系模式,实体型中的属性转换为关系模式的属性,实体型的主码转换为关系模式的关键字,用下划线加以标识,其中E-R图中的联系也要转换为关系模式,转换方法是:一对一的联系可转为单个关系模式,也可与任意一端的实体型转换成的关系合并,一对多的联系可转换为单个关系模式,也可与多端的实体型转换成的关系模式合并,多对多、三个及以上的联系只能转为单个关系模式。如雇员关系模式:雇员信息表(雇员编号,雇员名,雇员姓,邮箱,电话,入职日期,岗位编号,工资,奖金,所在部门)任务3逻辑结构设计2.对关系模式集合进行规范化处理范式是符合某一种级别的关系模式的集合,关系数据库中的关系须满足不同的范式,目前关系数据库有6种范式。第一范式(1NF),第二范式(2NF),第三范式(3NF),BCNF(BC范式),第四范式(4NF),第五范式(5NF)。
第一范式指表的每一列是不可再分的数据项,同一列中不可有多个值,不能存在相同的两行要求。任何一个关系数据库中第一范式是对关系模式的基本要求,不满足第一范式的数据库不是关系数据库。
第二范式是建立在第一范式的基础上的,第二范式要求实体的属性完全依赖于主属性,即不能存在仅依赖主属性的一部分,若存在那么这个属性的主属性的这一部分就要分解成一个新的实体。
第三范式的建立,要求满足第三范式的数据库表中不包含在其他表中已包含的非主键信息,即第三范式是属性不依赖于其他非主属性,也就是不存在传递依赖。任务3逻辑结构设计3.确定数据表和表中的列
根据上述分析结果得出人力资源管理的数据表结构,还需要为表中字段添加一些描述,如字段数据类型、约束等。雇员基本信息表,其它信息表略。
表11-1字段名雇员编号雇员名雇员姓邮箱电话入职日期岗位编号工资佣金比部门编号部门经理编号英文Employee_idFirst_nameLast_nameemailPhone_numberHire_dateJob_idsalaryCommision_pctDepartment——idManager_id数据类型整型变长字符变长字符变长字符变长字符日期变长字符整型整型整型整型是否空NYNNYNNYYNN主键否YNNNNNNNNNN任务4物理结构设计1.物理结构设计物理设计主要包括存储记录结构的设计、数据存放位置、存取方法、完整性及安全性和应用程序等的设计,当有前阶段运用范式对关系模式的规范化处理后,降低了关系模式的冗余,消除了数据依赖不合理因素,使关系模式达到了一定程度的分离,接下来就是选用合适的数据库管理系统(如MySQL)。任务5数据库实施11.5.1创建数据库和数据表创建的脚本createdatabasehr;usehr;CREATETABLE`hr`.`departments`(`department_id`int(4)NOTNULLCOMMENT'部门编号',`department_name`varchar(30)NOTNULLCOMMENT'部门名称',`manager_id`int(6)NULLCOMMENT'经理编号',`location_id`int(4)NULL,PRIMARYKEY(`department_id`));任务5数据库实施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'经理编号',`department_id`int(4)NULLCOMMENT'部门编号',PRIMARYKEY(`employee_id`));任务5数据库实施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`));任务5数据库实施CREATETABLE`hr`.`locations`(`location_id`int(4)NOTNULLCOMMENT'位置号',`street_address`varchar(40)NULLCOMMENT'街区地址',`postal_code`varchar(12)NULLCOMMENT'邮编',`city`varchar(30)NOTNULLCOMMENT'城市',`state_province`varchar(25)NULLCOMMENT'省市',`country_id`char(2)NULLCOMMENT'国家编号',PRIMARYKEY(`location_id`));
任务5数据库实施CREATETABLE`hr`.`regions`(`region_id`int(2)NOTNULLCOMMENT'地区编号',`region_name`varchar(25)NULLCOMMENT'地区名',PRIMARYKEY(`region_id`));
CREATETABLE`hr`.`countries`(`country_id`char(2)NOTNULLCOMMENT'国家编号',`country_name`varchar(30)NOTNULLCOMMENT'国家名',`region_id`int(2)NOTNULLCOMMENT'地区编号',PRIMARYKEY(`country_id`));任务5数据库实施参照附录“人力资源数据库(HR)的表数据”,添加样本数据到数据表中。部分样本数据添加如下。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);任务5数据库实施11.5.2存储过程创建运用存储过程查询员工信息,当输入员工的编号时,显示该员工的信息。这里运用带参数的存储过程,将员工编号作为一个输入型参数。代码如下。CREATEDEFINER=`root`@`localhost`PROCEDURE`pro_cx`(inbhint)begindeclarebhintdefault0;select*fromemployeeswhereemployee_id=@bh;end;测试雇员编号为100的雇员情况,调用如下。Callpro_cx(100);任务5数据库实施11.5.3数据库应用程序开发(1)启动Eclipse(2)选择菜单命令“File”|“New”|“JavaProject”,打开“NewJavaProject”新建一个工程的对话框,在该对话框projectname的文本框中输入“MyProj”,得到名称为MyProj的Java工程,如图11-9;1.创建Java工程(3)创建Java应用程序一个Java应用程序可包含多个类,但有且仅有一个类包含main()方法,它是作为程序的入口,在此先建一个类,以测试对数据库的通讯连接图11-92.连接数据库importjava.sql.*;publicclassHrMysqlJdbc{ publicstaticvoidmain(String[]args){ try{ Class.forName("com.mysql.cj.jdbc.Driver");//1.加载驱动
System.out.println("JDBC驱动程序加载成功"); } catch(Exceptione){ System.out.print("JDBC驱动程序加载失败"); e.printStackTrace(); } try{
任务5数据库实施 //2.获取连接对象
Connectionconnect=DriverManager.getConnection( "jdbc:mysql://localhost:3306/HR?serverTimezone=UTC&useSSL=false","root","root"); System.out.println("成功连接数据库");任务5数据库实施 //3.创建createStatement对象
Statementstmt=connect.createStatement();//数据源注意IP地址和端口号,数据库名字
try{ Class.forName(connectDB);//加载数据库引擎,返回给定字符串名的类
}catch(ClassNotFoundExceptione){ //e.printStackTrace(); System.out.println("加载数据库引擎失败"); System.exit(0); } System.out.println("数据库驱动成功");任务5数据库实施任务5数据库实施try{ Stringuser="root";//你自己创建的用户名字和密码!!
Stringpassword="root"; Connectioncon=DriverManager.getConnection(connectDB,user,password);//连接数据库对象
System.out.println("连接数据库成功"); Statementstmt=con.createStatement();//创建SQL命令对象
//创建表
System.out.println("查询"); System.out.println("开始读取数据"); ResultSetrs=stmt.executeQuery("SELECT*FROMemployees");//返回SQL语句查询结果集(集合)任务5数据库实施//循环输出每一条记录 System.out.println("雇员编号 \t雇员名\t雇员姓\t邮箱\t电话\t\t入职日期\t\t\t岗位编号\t\t工资\t奖金\t部门编号\t部门经理编号"); 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");任务5数据库实施 } System.out.println("读取完毕"); //关闭连接
stmt.close();//关闭命令对象连接
con.close();//关闭数据库连接
}catch(SQLExceptione){ e.printStackTrace(); //System.out.println("数据库连接错误"); System.exit(0); } }3.运行程序右击所建类名,选RunAs|JavaApplication命令,得到如下运行结果任务5数据库实施1.JDBC概述JDBC全称是Java数据库连接(javadatabaseconnectivity),它是一套用于执行SQL语句的JAVAAPI,应用程序可通过这套JAVAAPI连接到关系数据库,使用SQL语句完成对数据库中数据的查询、增加、修改和删除等操作。任务5数据库实施11.5.4JDBC数据访问Java应用程序与数据库的连接方式如图11-11所示。不同数据库(如MYSQL或ORACLE等)处理数据的方式不同,若直接使用数据库厂商提供的访问接口操作数据库,应用程序的可移植性较差。如用户在当前程序中使用的是MYSQL提供的接口操作数据库,如果换用ORACLE数据库,就要重新使用ORACLE数据库提供的接口,编码需要做较大的修改。如果使用JDBC就很方便移植,因为JDBC要求各数据库厂商按统一的规范提供数据库驱动程序,在程序中由JDBC和具体的数据库驱动程序联系,用户不必直接与底层数据库交互,这样使得代码的通用性增强。任务5数据库实施JDBC具有如下功能。(1)与数据库建立连接;(2)发送SQL语句;(3)处理结果。图11-11Java应用程序与数据库的连接方式任务5数据库实施2.加载JDBC驱动程序
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(StringclassName)实现。例如:try{ Class.forName(driverName); System.out.println("加载驱动成功!");}catch(Exceptione){ e.printStackTrace(); System.out.println("加载驱动失败!");}成功加载后,会将Driver类的实例注册到DriverManager类中。任务5数据库实施3.提供JDBC连接的URL
JDBCURL提供了一种标识数据库的方法,可以使相应的驱动程序能识别该数据库并与之建立连接。实际上,驱动程序编程员将决定用什么JDBCURL来标识特定的驱动程序。用户不必关心如何来形成JDBCURL,他们只须使用与所用的驱动程序一起提供的URL即可。JDBC的作用是提供某些约定,驱动程序编程员在构造他们的JDBCURL时应该遵循这些约定。任务5数据库实施
4.创建数据库的连接
要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象代表一个数据库的连接。
使用DriverManager的getConnectin(Stringurl,Stringusername,Stringpassword)方法传入指定的欲连接的数据库的路径、数据库的用户名和密码。例如:
try{
ConnectiondbConn=DriverManager.getConnection(dbURL,userName,userPwd); System.out.println("连接数据库成功!");}catch(Exceptione){ e.printStackTrace(); System.out.print("SQLServer连接失败!");}
任务5数据库实施5.创建一个Statement对象
要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型。
(1)执行静态SQL语句。通常通过Statement实例实现。
(2)执行动态SQL语句。通常通过PreparedStatement实例实现。
(3)执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式如下。
Statementstmt=con.createStatement();PreparedStatementpstmt=con.prepareStatement(sql);CallableStatementcstmt=con.prepareCall(“{CALLdemoSp(?,?)}”);
任务5数据库实施6.执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和exec
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 系绳物体的浮力问题-2023年中考物理复习讲练(原卷版)
- 知识产权保护承诺书
- 美丽的颐和园导游词(33篇)
- 物流运输车辆租赁合同(35篇)
- 粗砂垫层试验段的施工方案及试验段总结
- 23.1 平均数与加权平均数 同步练习
- 天津市南开区2024-2025学年七年级上学期11月期中道德与法治试题(含答案)
- 2024年建筑电工(建筑特殊工种)考试试题题库
- 黑龙江省大庆市肇源县联盟学校2024-2025学年七年级上学期11月期中生物试题(含答案)
- 广东省广州市名校2025届高三上学期综合测试(一)语文试题(含答案)
- 大数据毕业答辩
- 2023年中国移动考试题库
- 铜矿矿山工程案例介绍
- 金融资产投资合作协议
- 铸牢中华民族共同体意识-考试复习题库(含答案)
- 窦性心律失常的护理查房
- 2024年基金从业资格证题库(考试直接用)
- 医保法律法规培训课件
- 2024年中国教育出版传媒集团有限公司招聘笔试参考题库附带答案详解
- 《动画设计与制作》课件
- 2024医院消防安全培训
评论
0/150
提交评论