??前言
這篇文章是大學課程《JavaWeb基礎框架程序設計》考試題目的內容,包括了原題和答案。題目只包括了三道編程題,分值為30分、30分和40分,這篇文章繼上一篇(課程《JavaWeb基礎框架程序設計》考試題上篇——基礎應用題(計算應用、水仙花數(shù))),介紹40分的那題,以及代碼編寫中出現(xiàn)的報錯和解決方法。
??第三題(40分)
添加員工檔案:添加員工檔案包括兩個 JSP 頁面。其中 addEmployee1.jsp 頁面負責顯示添加界面,addEmployee2.jsp 負責添加新進員工檔案信息到指定數(shù)據(jù)庫。具體說明如下:
1)添加員工檔案信息頁面 addEmployee.jsp(該頁面已給出)運行界面如圖2-1所示,其表單屬性“action=addEmployee2.jsp”,指定本頁面的表單由addEmployee2.jsp負責處理。
2)addEmployee2.jsp(該頁面需要完成)負責獲取 addEmployee1.jsp 頁面表單元素值,將新進員工檔案信息添加到指定數(shù)據(jù)庫 hrms 當中。
提供的 addEmployee.jsp 頁面代碼如下。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>人事管理平臺</title>
<style type="text/css">
form td{
border:1px solid #93CBEC;
font-size:12px;
height:30px;
line-height:24px;
}
#resume{
width:500px;
height:80px;
}
</style>
</head>
<body>
<form action="searchEmployee2.jsp" method="post">
<table border=0 cellspacing=0 cellpadding=0 width=750px>
<tr>
<td colspan=4 bgcolor="#f1f7fc"><strong> 查詢員工檔案信息</strong></td>
</tr>
<tr>
<td width="150" align="center">員工編號:</td>
<td colspan=4 > <input type="text" name="employeeid" id="employeeid" /></td>
</tr>
<tr>
<td align="center">姓 名:</td>
<td colspan=4> <input type="text" name="username" id="username" /></td>
</tr>
<tr>
<td align="center">性 別:</td>
<td> <select name="sex" id="sex">
<option value="">所有</option>
<option value="男">男</option>
<option value="女">女</option>
</select>
</td>
</tr>
<tr>
<td align="center">所屬部門:</td>
<td> <select name="branch" id="branch">
<option value="">所有</option>
<option value="總經理室" >總經理室</option>
<option value="副總經理室">副總經理室</option>
<option value="銷售部">銷售部</option>
<option value="生產部">生產部</option>
<option value="采購部">采購部</option>
<option value="研發(fā)部">研發(fā)部</option>
<option value="財務部">財務部</option>
<option value="人事部">人事部</option>
</select> </td>
</tr>
<tr>
<td align="center">出生日期:</td>
<td> <input type="text" name="birthday" id="birthday" /></td>
</tr>
<tr>
<td align="center">籍 貫:</td>
<td> <input type="text" name="nativeplace" id="nativeplace" /></td>
</tr>
<tr>
<td align="center">婚姻狀況:</td>
<td> <select name="marriage" id="marriage">
<option value="">所有</option>
<option value="未婚">未婚</option>
<option value="已婚">已婚</option>
<option value="離異">離異</option>
<option value="喪偶">喪偶</option>
</select> </td>
</tr>
<tr>
<td align="center">身份證號:</td>
<td> <input type="text" name="identityid" id="identityid" /></td>
</tr>
<tr>
<td align="center">政治面貌:</td>
<td> <select name="politics" id="politics">
<option value="">所有</option>
<option value="黨員">黨員</option>
<option value="團員">團員</option>
<option value="群眾">群眾</option>
<option value="其他">其他</option>
</select> </td>
</tr>
<tr>
<td align="center">民 族:</td>
<td> <input type="text" name="folk" id="folk" /></td>
</tr>
<tr>
<td align="center">學 歷:</td>
<td> <select name="education" id="education">
<option value="">所有</option>
<option value="初中">初中</option>
<option value="高中">高中</option>
<option value="中專">中專</option>
<option value="專科">???span id="n5n3t3z" class="token tag"></option>
<option value="本科">本科</option>
<option value="碩士">碩士</option>
<option value="博士">博士</option>
</select> </td>
</tr>
<tr>
<td align="center">專 業(yè):</td>
<td> <input type="text" name="department" id="department" /></td>
</tr>
<tr>
<td align="center">畢業(yè)日期:</td>
<td> <input type="text" name="graduatedate" id="graduatedate" /></td>
</tr>
<tr>
<td align="center">畢業(yè)院校:</td>
<td> <input type="text" name="university" id="university" /></td>
</tr>
<tr>
<td align="center">職 稱:</td>
<td> <select name="position" id="position">
<option value="">所有</option>
<option value="助理工程師">助理工程師</option>
<option value="工程師">工程師</option>
<option value="高級工程師">高級工程師</option>
<option value="助理工程師">助理工程師</option>
<option value="會計師">會計師</option>
<option value="注冊會計師">注冊會計師</option>
<option value="助理經濟師">助理經濟師</option>
<option value="經濟師">經濟師</option>
<option value="高級經濟師">高級經濟師</option>
<option value="其他">其他</option>
</select> </td>
</tr>
<tr>
<td align="center">在職情況:</td>
<td> <select name="incumbency" id="incumbency">
<option value="">所有</option>
<option value="在職">在職</option>
<option value="離職">離職</option>
<option value="退休">退休</option>
<option value="待聘">待聘</option>
<option value="其他">其他</option>
</select></td>
</tr>
<tr>
<td align="center">用工形式:</td>
<td> <select name="incumbencytype" id="incumbencytype">
<option value="">所有</option>
<option value="臨時工">正式工</option>
<option value="臨時工">臨時工</option>
<option value="合同工">合同工</option>
<option value="見習生">見習生</option>
<option value="其他">其他</option>
</select></td>
</tr>
<tr>
<td align="center">個人簡歷:</td>
<td> <input type="text" name="resume" id="resume"></td>
</tr>
<tr>
<td colspan=4 align="center">
<input type="reset" value="清除" />
<input type="submit" value="提交" />
</td>
</tr>
</table>
</form>
</body>
</html>
addEmployee2.jsp 頁面解答如下。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.sql.*" %>
<%
// 獲取表單中提交的參數(shù)
request.setCharacterEncoding("utf-8"); // 設置編碼格式
String EmployeeID = request.getParameter("employeeid");
String UserName = request.getParameter("username");
String Sex = request.getParameter("sex");
String Branch = request.getParameter("branch");
String Birthday = request.getParameter("birthday");
String NativePlace = request.getParameter("nativeplace");
String Marriage = request.getParameter("marriage");
String IdentityID = request.getParameter("identityid");
String Politics = request.getParameter("politics");
String Folk = request.getParameter("folk");
String Education = request.getParameter("education");
String Department = request.getParameter("department");
String GraduateDate = request.getParameter("graduatedate");
String University = request.getParameter("university");
String Position = request.getParameter("position");
String Incumbency = request.getParameter("incumbency");
String IncumbencyType = request.getParameter("incumbencytype");
String Resume = request.getParameter("resume");
// 判斷是否有必填項為空
if (EmployeeID == null || EmployeeID.equals("") ||
UserName == null || UserName.equals("")) {
out.println("員工編號和姓名為必填項");
} else {
// 數(shù)據(jù)庫連接信息
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/hrms?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "123456";
Connection conn = null;
try {
// 加載驅動程序
Class.forName(driver);
// 創(chuàng)建數(shù)據(jù)庫連接
conn = DriverManager.getConnection(url, user, password);
// 構建插入 SQL 語句
String sql = "INSERT INTO employee (EmployeeID,UserName,Sex,Branch,Birthday,NativePlace,Marriage,IdentityID,Politics,Folk,Education,Department,GraduateDate,University,Position,Incumbency,IncumbencyType,Resume) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
// 創(chuàng)建 PreparedStatement 對象,用于執(zhí)行 SQL 語句
PreparedStatement pstmt = conn.prepareStatement(sql);
// 設置參數(shù)值
pstmt.setString(1, EmployeeID);
pstmt.setString(2, UserName);
pstmt.setString(3, Sex);
pstmt.setString(4, Branch);
pstmt.setString(5, Birthday);
pstmt.setString(6, NativePlace);
pstmt.setString(7, Marriage);
pstmt.setString(8, IdentityID);
pstmt.setString(9, Politics);
pstmt.setString(10, Folk);
pstmt.setString(11, Education);
pstmt.setString(12, Department);
pstmt.setString(13, GraduateDate);
pstmt.setString(14, University);
pstmt.setString(15, Position);
pstmt.setString(16, Incumbency);
pstmt.setString(17, IncumbencyType);
pstmt.setString(18, Resume);
// 執(zhí)行 SQL 語句
pstmt.executeUpdate();
out.println("數(shù)據(jù)插入成功");
// 關閉 PreparedStatement 對象
pstmt.close();
} catch (Exception e) {
e.printStackTrace();
out.println("數(shù)據(jù)庫操作失?。? + e.getMessage());
} finally {
// 關閉數(shù)據(jù)庫連接
try {
if (conn != null) {
conn.close();
}
} catch (SQLException se) {
se.printStackTrace();
}
}
}
%>
數(shù)據(jù)庫表結構如下(需要SQL文件私信我或評論區(qū)留言)。
運行結果如下。填好相對應的數(shù)據(jù)。
點擊提交,數(shù)據(jù)插入成功。
然后檢查數(shù)據(jù)中是否有新插入的數(shù)據(jù)。
具體邏輯如下:
-
首先通過 request.getParameter()
方法獲取表單中提交的參數(shù),包括員工編號、姓名、性別、所屬部門、出生年月、籍貫、婚姻狀況、身份證號、政治面貌、民族、學歷、畢業(yè)時間、畢業(yè)院校、職位、任職狀態(tài)、用工類型和個人簡歷。 -
然后判斷必填項是否為空,如果為空則輸出提示信息;否則繼續(xù)下一步操作。
-
接著使用 JDBC API 連接到 MySQL 數(shù)據(jù)庫,首先加載 MySQL 驅動程序,并構建插入 SQL 語句。
-
創(chuàng)建 PreparedStatement 對象,用于執(zhí)行 SQL 語句,并設置參數(shù)值。
-
執(zhí)行 SQL 語句并提交事務,輸出操作結果。
-
最后關閉連接對象和 PreparedStatement 對象。
??報錯以及解決方法
一年多沒寫 JavaWeb
了,在寫這個題目的時候遇到了很報錯,與其說是在寫題,不如說是在處理 bug。題目很簡單,一會功夫就寫完了要求的功能了,但是數(shù)據(jù)庫和 jdbc
的連接出現(xiàn)了問題,因為不是學校的機房環(huán)境,而且老師給的包是三點幾的遠古版本,導致一直報錯,和產生其他相對應的錯誤。最后換了個八點多的版本,這些問題就揮之而去了,最后也是成功的運行了。接下來我們來看看出現(xiàn)報錯有哪些(因為現(xiàn)在報錯已經全部處理完了,所以得重新走一遍案發(fā)現(xiàn)場
了)。
報錯1??:The server time zone value ‘?й???????‘ is unrecognized or represents more than one time zone
??解決方法:
首先我們要知道出現(xiàn)這個報錯的原因是因為MySQL的時區(qū)設置出現(xiàn)了問題。
報錯中提示我們要這么You must configure either the server or JDBC driver (via the ‘serverTimezone’ configuration property) to use a more specifc time zone value if you want to utilize time zone support.
意思是:如果你想運用時區(qū)支持,必須配置服務器或JDBC驅動程序(通過 'serverTimezone'
配置屬性)來使用更具體的時區(qū)值。
因此,我們在 jdbc
數(shù)據(jù)庫連接的 url 后面加上 serverTimezone=UTC
,即可解決。serverTimezone
連接 mysql
數(shù)據(jù)庫時指定了時差,UTC
是全球標準時間,北京地區(qū)早標準時間8小時。
報錯2??: Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.
與 Unknown character set index for field '255' received from server.
與 Unable to connect to any hosts due to exception: java.net.ConnectException: Connection refused: connect
??解決方法:
首先這幾個報錯都是還沒換高版本 mysql-connector-java-xxx.jar
前出現(xiàn)的 bug,我怎么也沒想到老師給的是三點幾的包,然后懟著 jdbc 的 url 搞了大半天,然后出現(xiàn)上述的這些問題。他們意思分別是:
1.從服務器接收到未知的初始字符集索引“255”??梢酝ㄟ^“characterEncoding”屬性強制設置初始客戶端字符集。
2.從服務器收到字段“255”的未知字符集索引。
3.由于以下異常,無法連接到任何主機:java.net.ConnectException:連接被拒絕:connect
首先要確保JDBC驅動程序是 MySQL Connector/J 5.1.x
或更高版本。早期版本可能無法正確處理字符集,因此可能會導致該錯誤。因此我們從mysql-connector-java-xxx.jar
開始處理,切換更高版本的,然后再檢查代碼有沒有其他報錯,如數(shù)據(jù)庫服務器的其他設置、是否啟用了自定義字符集等。
報錯3??:Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
??解決方法:
報錯的意思是:正在加載類“com.mysql.jdbc.Driver”。這是不推薦使用的。新的驅動程序類是“com.mysql.cj.jdbc.driver”。驅動程序是通過SPI自動注冊的,通常不需要手動加載驅動程序類。
首先出現(xiàn)這個報錯的原因是因為切換高版本的mysql-connector-java-xxx.jar
后原先的 com.mysql.jdbc.Driver
不推薦使用了,需要把它修改成 com.mysql.cj.jdbc.Driver
即可。
?補充:com.mysql.cj.jdbc.Driver 報錯
遇到這個問題后,需要檢查如下:
- 是否已將
MySQL JDBC
驅動程序添加到您的項目依賴項中。您可以通過將官方的MySQL JDBC
驅動程序JAR
文件添加到項目的classpath
中來解決此問題。 - 檢查驅動程序的版本是否與您使用的
MySQL
數(shù)據(jù)庫版本匹配。如果不匹配,會出現(xiàn)此類錯誤。建議您使用與您正在使用的MySQL
版本相應的官方MySQL JDBC
驅動程序版本。 - 您的
JDBC URL
是否正確。您應該檢查您的JDBC URL
是否正確,包括正確指定主機、端口和數(shù)據(jù)庫名稱等信息。 - 檢查您的代碼是否正確,并確保正確加載了驅動程序。您可以在連接數(shù)據(jù)庫之前使用
Class.forName()
方法注冊JDBC
驅動程序。
??最后
這一題是關于人事管理平臺的添加員工檔案信息的操作題,除了原題和答案,還有報錯處理的解決方法,至此三道題的內容以及介紹了,前兩道題目可以看如下文章。文章來源:http://www.zghlxwxcb.cn/news/detail-442147.html
文章地址:課程《JavaWeb基礎框架程序設計》考試題上篇——基礎應用題(計算應用、水仙花數(shù))文章來源地址http://www.zghlxwxcb.cn/news/detail-442147.html
到了這里,關于課程《JavaWeb基礎框架程序設計》考試題下篇——數(shù)據(jù)庫與表單操作用題(人事管理平臺的添加員工檔案信息的操作題)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!