基於servlet的 考勤管理系統 所遇到的問題

******************************************
(鏈接數據庫時出現的問題)主鍵問題     com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '0' for key 1

解決:

Connection conn = DriverManager.getConnection(url, username, password);
		String sql = "insert into attendance(person,in_out,io_time) values(?,?,?)";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, book.getPerson());
		ps.setString(2, book.getIn_out());
		ps.setTimestamp(3, Timestamp.valueOf(request.getParameter("Tio_time")));//-------------javabean 裏頭獲取的是一個Timestamp,但是在html裏頭傳遞是是一個string所以不能用Timestamp接收
		int row = ps.executeUpdate();                                           //不能直接的接收,要間接的接收
		if(row>0){
			out.print("成功添加了 "+row + "條數據!");
		   
		   		}
		ps.close();
		conn.close();

       針對於executeUpdate() 方法

沒有自動跟新,會報出  Duplicate entry '0' for key 1 錯誤,因爲這個錯誤是你在對數據庫 增加數據的時候一直在對 同一個主鍵重複添加,所以他就會報出錯誤

create table attendance

(


A_id integer auto_increment,
person char(15),
in_out char(4),
-- 缺勤時間
io_time datetime,
primary key(A_id),
foreign key (person) references Person(person)
);

auto_increment 是將主鍵號自動遞增
****************************************************
在網頁中傳輸的是String 但是javabean接收的是 Timestamp
org.apache.jasper.JasperException: Unable to convert string
解決:
   在接收時,不要用javabean去接收
 <div id="apDiv1">	<form action="add_kq.jsp" method="post" οnsubmit=" return check(this)">
		<ul>
			<li>員 工  號     : <input type="text" name="person"/></li>
			<li>
			 
		  出入情況 : <input type="text" name="in_out"/></li>
			<li>出入時間 : <input type="text" name="Tio_time"/></li>   
			<li><input type="submit" value="添加"></li>
		</ul>
<li>出入時間 : <input type="text" name="Tio_time"/></li> 

注意:Tio_time

這個是爲了區別 javabean裏頭 的那個 Timestamp 對象的實例


問題就是出在這一句,由於這個是我自己做的工程,所以要是看不懂的,可以跟我要工程的源碼;

javabean

public class AttendanceBean {
	private int A_id;
	private String person;
	private String in_out;
	private Timestamp io_time;<span style="font-family: Arial, Helvetica, sans-serif;">}</span>

ps.setString(1, book.getPerson());
		ps.setString(2, book.getIn_out());
		ps.setTimestamp(3, Timestamp.valueOf(request.getParameter("Tio_time")));//-------------javabean 裏頭獲取的是一個Timestamp,但是在html裏頭傳遞是是一個string所以不能用Timestamp接收
		int row = ps.executeUpdate();                                           //不能直接的接收,要間接的接收
注意這裏頭的區分




******************************************************
jsp下部署圖片
<br><a href="${pageContext.request.contextPath }/main.jsp"> <返回></a>
	<div id="apDiv1"><img src="../Images/3.gif" width="612" height="80"><span style="font-family: Arial, Helvetica, sans-serif;"></div></span><span style="font-family: Arial, Helvetica, sans-serif;">這個裏頭要用 ../   來獲取相對路徑</span><span style="font-family: Arial, Helvetica, sans-serif;"><img src="../Images/3.gif"</span>


*****************************************************
在客戶端從數據庫獲取 數據的時候:
一開始是在工程下直接獲取數據,但是一直獲取不出來
通過EL的相對路徑來獲取的話就可以 
加上這段代碼<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
                這個是調用jstl庫裏頭的EL
<td>●<a href="${pageContext.request.contextPath }/servlet/FindServlet">考勤修改窗體</td>


******************************************************
在通過servlet獲取session的時候

先加載數據,纔可以對數據進行操作

在客戶端與服務器中,你要先去訪問    查找 的那個servlet,再去執行操作才能獲取到數據庫;

先訪問FindServlet  才能實現 UpdateServlet

這個是FindServlet裏頭重定向回去

// 請求轉發到bookList.jsp
		request.getRequestDispatcher("/setTime.jsp").forward(request, response);


*****************************************************
jdbc鏈接數據庫,從客戶端獲取數據,問題:在數據表中的數據中文出現亂碼"??"
這個問題有三個方向入手  1:在創建數據庫的時候,將編碼設定爲  utf8;

      2:在數據庫表中的 字符集 是否爲 utf8;

       

      3:String url = "jdbc:mysql://localhost:3306/db_kaoqin?characterEncoding=utf8";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章