บางครั้งจำเป็นต้องนับจำนวนการคลิกสำหรับแต่ละบทความ หากจำเป็นต้องอัปเดตฐานข้อมูลทุกครั้งที่เรียกดู ประสิทธิภาพจะสูงมากเมื่อจำนวนการเข้าชมมีมาก ความกดดันต่อเซิร์ฟเวอร์จะมาก วิธีที่ดีกว่าคืออันดับแรกแคชข้อมูลที่จะอัปเดต จากนั้นใช้การประมวลผลแบบแบตช์ของฐานข้อมูลตามช่วงเวลาปกติเพื่ออัพเดตฐานข้อมูลเป็นแบตช์ ซอร์สโค้ดเป็นดังนี้:
CountBean.java
/*
*CountData.java
-
* ตั้งเมื่อ 18 ตุลาคม 2549 16:44 น
-
* หากต้องการเปลี่ยนเทมเพลตนี้ ให้เลือก Tools | ตัวเลือก และค้นหาเทมเพลตด้านล่าง
* โหนดการสร้างและการจัดการแหล่งที่มา คลิกขวาที่เทมเพลตแล้วเลือก
* เปิด จากนั้นคุณสามารถเปลี่ยนแปลงเทมเพลตในตัวแก้ไขแหล่งที่มาได้
*/
แพ็คเกจ com.tot.count;
/**
-
* @ผู้เขียน http://www.tot.name
-
CountBean คลาสสาธารณะ {
countType สตริงส่วนตัว;
int countId;
/** สร้างอินสแตนซ์ใหม่ของ CountData */
CountBean สาธารณะ () {}
โมฆะสาธารณะ setCountType (String countTypes) {
this.countType=countTypes;
-
โมฆะสาธารณะ setCountId (int countIds) {
this.countId=countIds;
-
สตริงสาธารณะ getCountType(){
กลับนับประเภท;
-
สาธารณะ int getCountId(){
ส่งคืนจำนวนนับ;
-
}
CountCache.java
/*
*CountCache.java
-
* ตั้งเมื่อ 18 ตุลาคม 2549 17:01 น
-
* หากต้องการเปลี่ยนเทมเพลตนี้ ให้เลือก Tools | ตัวเลือก และค้นหาเทมเพลตด้านล่าง
* โหนดการสร้างและการจัดการแหล่งที่มา คลิกขวาที่เทมเพลตแล้วเลือก
* เปิด จากนั้นคุณสามารถเปลี่ยนแปลงเทมเพลตในตัวแก้ไขแหล่งที่มาได้
*/
แพ็คเกจ com.tot.count;
นำเข้า java.util.*;
-
-
* @ผู้เขียน http://www.tot.name
-
CountCache คลาสสาธารณะ {
รายการ LinkedList สาธารณะแบบคงที่ = ใหม่ LinkedList ();
/** สร้างอินสแตนซ์ใหม่ของ CountCache */
CountCache สาธารณะ () {}
โมฆะคงที่สาธารณะเพิ่ม (CountBean cb) {
ถ้า(cb!=null){
list.add(cb);
-
-
}
CountControl.java
/*
*CountThread.java
-
* ตั้งเมื่อ 18 ตุลาคม 2549 16:57 น
-
* หากต้องการเปลี่ยนเทมเพลตนี้ ให้เลือก Tools | ตัวเลือก และค้นหาเทมเพลตด้านล่าง
* โหนดการสร้างและการจัดการแหล่งที่มา คลิกขวาที่เทมเพลตแล้วเลือก
* เปิด จากนั้นคุณสามารถเปลี่ยนแปลงเทมเพลตในตัวแก้ไขแหล่งที่มาได้
*/
แพ็คเกจ com.tot.count;
นำเข้า tot.db.DBUtils;
นำเข้า java.sql.*;
-
-
* @ผู้เขียน http://www.tot.name
-
CountControl คลาสสาธารณะ{
ส่วนตัวคงที่ยาว LastExecuteTime=0;//เวลาอัปเดตล่าสุด ส่วนตัวคงที่ยาวดำเนินการSep=60000;//กำหนดช่วงเวลาการอัปเดตเป็นมิลลิวินาที/** สร้างอินสแตนซ์ใหม่ของ CountThread */
สาธารณะ CountControl() {}
โมฆะซิงโครไนซ์สาธารณะดำเนินการอัปเดต () {
การเชื่อมต่อ conn=null;
คำสั่งที่เตรียมไว้ ps=null;
พยายาม{
conn = DBUtils.getConnection();
conn.setAutoCommit(เท็จ);
ps=conn.prepareStatement("อัพเดต t_news set hits=hits+1 โดยที่ id=?");
สำหรับ(int i=0;i<CountCache.list.size();i++){
CountBean cb=(CountBean)CountCache.list.getFirst();
CountCache.list.removeFirst();
ps.setInt(1, cb.getCountId());
ps.executeUpdate();⑴
//ps.addBatch();⑵
-
//int [] นับ = ps.executeBatch();⑶
conn.commit();
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
} ในที่สุด{
พยายาม{
ถ้า(ps!=null) {
PS.เคลียร์พารามิเตอร์();
ปล.ปิด();
PS=null;
-
}จับ(SQLException e){}
DBUtils.closeConnection(conn);
-
-
สาธารณะยาว getLast () {
กลับครั้งสุดท้าย ExecuteTime;
-
โมฆะสาธารณะวิ่ง () {
ยาวแล้ว = System.currentTimeMillis();
ถ้า ((ตอนนี้ - LastExecuteTime) > ExecuteSep) {
//System.out.print("lastExecuteTime:"+lastExecuteTime);
//System.out.print(" now:"+now+"n");
// System.out.print(" sep="+(ตอนนี้ - LastExecuteTime)+"n");
LastExecuteTime=ตอนนี้;
ดำเนินการอัปเดต();
-
อื่น{
//System.out.print("รอ "+(ตอนนี้ - LastExecuteTime)+" วินาที:"+"n");
-
-
-
//หมายเหตุ: หากไดรเวอร์ฐานข้อมูลของคุณรองรับการประมวลผลแบบแบตช์ คุณสามารถลบความคิดเห็นก่อนโค้ดที่ทำเครื่องหมายด้วย ⑵ และ ⑶ และเพิ่ม
คลาสความคิดเห็นก่อนโค้ด ⑴ ต่อไปนี้คือการเรียกต่อไปนี้ใน JSP
-
CountBean cb=CountBean ใหม่();
cb.setCountId(Integer.parseInt(request.getParameter("cid")));
CountCache.เพิ่ม(cb);
out.print(CountCache.list.size()+"<br>");
CountControl c=ใหม่ CountControl();
ค.รัน();
out.print(CountCache.list.size()+"<br>");
-