(鏈接數據庫時出現的問題)主鍵問題 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";