في بعض الأحيان يكون من الضروري حساب عدد النقرات لكل مقالة إذا كانت قاعدة البيانات بحاجة إلى التحديث في كل مرة يتم تصفحها، فسيكون الأداء عاليًا جدًا عندما يكون عدد الزيارات كبيرًا. الطريقة الأفضل هي تخزين البيانات المراد تحديثها مؤقتًا أولاً، ثم استخدام المعالجة المجمعة لقاعدة البيانات على فترات زمنية منتظمة لتحديث قاعدة البيانات على دفعات. كود المصدر هو كما يلي:
CountBean.java
/*
*CountData.java
*
* تم إنشاءه بتاريخ 18 أكتوبر 2006 الساعة 4:44 مساءً
*
* لتغيير هذا القالب، اختر أدوات | خيارات وحدد موقع القالب أسفله
* عقدة إنشاء المصدر وإدارته. انقر بزر الماوس الأيمن فوق القالب واختر
* افتح، ويمكنك بعد ذلك إجراء تغييرات على القالب في محرر المصدر.
*/
الحزمة com.tot.count
/**
*
* @المؤلف http://www.tot.name
*/
الطبقة العامة CountBean {
نوع سلسلة خاصة؛
عدد صحيح؛
/** إنشاء مثيل جديد لـ CountData */
الكونت بين العام () {}
public void setCountType(String countTypes){
this.countType=countTypes;
}
مجموعة الفراغ العام (int countIds) {
this.countId=countIds;
}
سلسلة عامة getCountType(){
نوع العد الإرجاع؛
}
كثافة العمليات العامة getCountId(){
معرف الإرجاع ؛
}
}
CountCache.java
/*
*CountCache.java
*
* تم إنشاءه بتاريخ 18 أكتوبر 2006 الساعة 5:01 مساءً
*
* لتغيير هذا القالب، اختر أدوات | خيارات وحدد موقع القالب أسفله
* عقدة إنشاء المصدر وإدارته. انقر بزر الماوس الأيمن فوق القالب واختر
* افتح، ويمكنك بعد ذلك إجراء تغييرات على القالب في محرر المصدر.
*/
الحزمة com.tot.count;
import java.util.*;
/**
*
* @المؤلف http://www.tot.name
*/
الطبقة العامة CountCache {
قائمة LinkedList العامة الثابتة = قائمة LinkedList الجديدة () ؛
/** إنشاء مثيل جديد لـ CountCache */
CountCache العامة () {}
إضافة الفراغ الثابت العام (CountBean cb) {
إذا (كب!=فارغة){
list.add(cb);
}
}
}
CountControl.java
/*
*CountThread.java
*
* تم إنشاءه بتاريخ 18 أكتوبر 2006 الساعة 4:57 مساءً
*
* لتغيير هذا القالب، اختر أدوات | خيارات وحدد موقع القالب أسفله
* عقدة إنشاء المصدر وإدارته. انقر بزر الماوس الأيمن فوق القالب واختر
* افتح، ويمكنك بعد ذلك إجراء تغييرات على القالب في محرر المصدر.
*/
الحزمة com.tot.count;
import tot.db.DBUtils;
استيراد java.sql.*;
/**
*
* @المؤلف http://www.tot.name
*/
كونتكونترول الطبقة العامة {
خاص ثابت طويل lastExecuteTime=0;// آخر وقت تحديث خاص ثابت طويل ExecuteSep=60000;// تحديد الفاصل الزمني للتحديث بالمللي ثانية/** إنشاء مثيل جديد لـ CountThread */
كونت كونترول العامة () {}
تنفيذ الفراغ العام المتزامن () {
اتصال conn=null;
PreparedStatement ps=null;
يحاول{
conn = DBUtils.getConnection();
conn.setAutoCommit(false);
ps=conn.prepareStatement("تحديث مجموعة t_news hits=hits+1 Where id=؟");
for(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 [] counts = ps.executeBatch();⑶
conn.commit();
}قبض(استثناء ه){
printStackTrace();
} أخيراً{
يحاول{
إذا (ملاحظة! = فارغة) {
ps.clearParameters();
ملاحظة: إغلاق ()؛
ملاحظة = فارغة؛
}
}قبض على(SQLException ه){}
DBUtils. CloseConnection(conn);
}
}
getLast العامة الطويلة () {
إرجاع LastExecuteTime؛
}
تشغيل الفراغ العام () {
long now = System.currentTimeMillis();
إذا ((الآن - LastExecuteTime)> ExecuteSep) {
//System.out.print("lastExecuteTime:"+lastExecuteTime);
//System.out.print("الآن:"+now+"n");
// System.out.print(" sep="+(now - lastExecuteTime)+"n");
lastExecuteTime=now;
تنفيذ التحديث () ؛
}
آخر{
//System.out.print("انتظر "+(الآن - lastExecuteTime)+" ثانية:"+"n");
}
}
}
// ملاحظة: إذا كان برنامج تشغيل قاعدة البيانات لديك يدعم المعالجة المجمعة، فيمكنك إزالة التعليقات قبل الرمز المميز بـ ⑵ و⑶، وإضافة
فئة التعليق قبل الرمز ⑴، وفيما يلي الاستدعاء التالي في JSP.
<%
CountBean cb=new CountBean();
cb.setCountId(Integer.parseInt(request.getParameter("cid")));
CountCache.add(cb);
out.print(CountCache.list.size()+"<br>");
CountControl c=new CountControl();
c.run();
out.print(CountCache.list.size()+"<br>");
%>