Manchmal ist es notwendig, die Anzahl der Klicks für jeden Artikel zu zählen. Wenn die Datenbank bei jedem Durchsuchen aktualisiert werden muss, ist die Leistung sehr hoch, wenn die Anzahl der Besuche groß ist. Eine bessere Möglichkeit besteht darin, die zu aktualisierenden Daten zunächst zwischenzuspeichern und dann die Datenbank in regelmäßigen Abständen mithilfe der Stapelverarbeitung zu aktualisieren, um die Datenbank stapelweise zu aktualisieren. Der Quellcode lautet wie folgt:
CountBean.java
/*
*CountData.java
*
* Erstellt am 18. Oktober 2006, 16:44 Uhr
*
* Um diese Vorlage zu ändern, wählen Sie Extras | Optionen und suchen Sie die Vorlage unten
* Klicken Sie mit der rechten Maustaste auf die Vorlage und wählen Sie „Quellenerstellung und -verwaltung“.
* Öffnen. Anschließend können Sie im Quelleditor Änderungen an der Vorlage vornehmen.
*/
package com.tot.count;
/**
*
* @author http://www.tot.name
*/
öffentliche Klasse CountBean {
privater String countType;
int countId;
/** Erstellt eine neue Instanz von CountData */
öffentliches CountBean() {}
public void setCountType(String countTypes){
this.countType=countTypes;
}
public void setCountId(int countIds){
this.countId=countIds;
}
öffentlicher String getCountType(){
return countType;
}
public int getCountId(){
countId zurückgeben;
}
}
CountCache.java
/*
*CountCache.java
*
* Erstellt am 18. Oktober 2006, 17:01 Uhr
*
* Um diese Vorlage zu ändern, wählen Sie Extras | Optionen und suchen Sie die Vorlage unten
* Klicken Sie mit der rechten Maustaste auf die Vorlage und wählen Sie „Quellenerstellung und -verwaltung“.
* Öffnen. Anschließend können Sie im Quelleditor Änderungen an der Vorlage vornehmen.
*/
Paket com.tot.count;
import java.util.*;
/**
*
* @author http://www.tot.name
*/
öffentliche Klasse CountCache {
öffentliche statische LinkedList list=new LinkedList();
/** Erstellt eine neue Instanz von CountCache */
öffentlicher CountCache() {}
public static void add(CountBean cb){
if(cb!=null){
list.add(cb);
}
}
}
CountControl.java
/*
*CountThread.java
*
* Erstellt am 18. Oktober 2006, 16:57 Uhr
*
* Um diese Vorlage zu ändern, wählen Sie Extras | Optionen und suchen Sie die Vorlage unten
* Klicken Sie mit der rechten Maustaste auf die Vorlage und wählen Sie „Quellenerstellung und -verwaltung“.
* Öffnen. Anschließend können Sie im Quelleditor Änderungen an der Vorlage vornehmen.
*/
Paket com.tot.count;
import tot.db.DBUtils;
java.sql.* importieren;
/**
*
* @author http://www.tot.name
*/
öffentliche Klasse CountControl{
private static long lastExecuteTime=0;//Letzte Aktualisierungszeit private static longexecuteSep=60000;//Definieren Sie das Aktualisierungsintervall in Millisekunden/** Erstellt eine neue Instanz von CountThread */
öffentliches CountControl() {}
öffentlich synchronisiert voidexecuteUpdate(){
Verbindung conn=null;
PreparedStatement ps=null;
versuchen{
conn = DBUtils.getConnection();
conn.setAutoCommit(false);
ps=conn.prepareStatement("update t_news set 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();
}catch(Ausnahme e){
e.printStackTrace();
} Endlich{
versuchen{
if(ps!=null) {
ps.clearParameters();
ps.close();
ps=null;
}
}catch(SQLException e){}
DBUtils.closeConnection(conn);
}
}
public long getLast(){
return lastExecuteTime;
}
public void run(){
long now = System.currentTimeMillis();
if ((now - lastExecuteTime) >executeSep) {
//System.out.print("lastExecuteTime:"+lastExecuteTime);
//System.out.print(" now:"+now+"n");
// System.out.print(" sep="+(now - lastExecuteTime)+"n");
lastExecuteTime=now;
ausführenUpdate();
}
anders{
//System.out.print("wait for "+(now - lastExecuteTime)+" seconds:"+"n");
}
}
}
//Hinweis: Wenn Ihr Datenbanktreiber die Stapelverarbeitung unterstützt, können Sie die Kommentare vor dem mit ⑵ und ⑶ gekennzeichneten Code entfernen und die Kommentarklasse
vor dem Code ⑴ hinzufügen. Das Folgende ist der folgende Aufruf in 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>");
%>