Il est parfois nécessaire de compter le nombre de clics pour chaque article. Si la base de données doit être mise à jour à chaque consultation, les performances seront très élevées lorsque le nombre de visites est important. La pression sur le serveur sera grande. Une meilleure façon consiste d'abord à mettre en cache les données à mettre à jour, puis à utiliser le traitement par lots de la base de données à intervalles réguliers pour mettre à jour la base de données par lots. Le code source est le suivant :
CountBean.java
/*
*CountData.java
*
* Créé le 18 octobre 2006, 16h44
*
* Pour modifier ce modèle, choisissez Outils | Options et localisez le modèle sous
* le nœud Création et gestion de sources. Cliquez avec le bouton droit sur le modèle et choisissez.
* Ouvrir. Vous pouvez ensuite apporter des modifications au modèle dans l'éditeur de source.
*/
paquet com.tot.count
/**
*
* @auteur http://www.tot.name
*/
classe publique CountBean {
chaîne privée countType ;
int compteId ;
/** Crée une nouvelle instance de CountData */
public CountBean() {}
public void setCountType(String countTypes){
this.countType=countTypes ;
}
public void setCountId(int countIds){
this.countId=countIds;
}
chaîne publique getCountType(){
retourner countType;
}
public int getCountId(){
return countId ;
}
}
CountCache.java
/*
*CountCache.java
*
* Créé le 18 octobre 2006, 17h01
*
* Pour modifier ce modèle, choisissez Outils | Options et localisez le modèle sous
* le nœud Création et gestion de sources. Cliquez avec le bouton droit sur le modèle et choisissez.
* Ouvrir. Vous pouvez ensuite apporter des modifications au modèle dans l'éditeur de source.
*/
package com.tot.count;
importer java.util.* ;
/**
*
* @auteur http://www.tot.name
*/
classe publique CountCache {
public static LinkedList list=new LinkedList();
/** Crée une nouvelle instance de CountCache */
public CountCache() {}
public static void add(CountBean cb){
si(cb!=null){
list.add(cb);
}
}
}
CountControl.java
/*
*CountThread.java
*
* Créé le 18 octobre 2006, 16h57
*
* Pour modifier ce modèle, choisissez Outils | Options et localisez le modèle sous
* le nœud Création et gestion de sources. Cliquez avec le bouton droit sur le modèle et choisissez.
* Ouvrir. Vous pouvez ensuite apporter des modifications au modèle dans l'éditeur de source.
*/
package com.tot.count;
importer tot.db.DBUtils ;
importer java.sql.* ;
/**
*
* @auteur http://www.tot.name
*/
classe publique CountControl{
private static long lastExecuteTime=0;//Heure de la dernière mise à jour private static long performSep=60000;//Définir l'intervalle de mise à jour en millisecondes/** Crée une nouvelle instance de CountThread */
public CountControl() {}
public synchronisé void executeUpdate(){
Connexion conn=null ;
PreparedStatement ps=null ;
essayer{
conn = DBUtils.getConnection();
conn.setAutoCommit(false);
ps=conn.prepareStatement("mettre à jour t_news set hits=hits+1 où id=?");
pour(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 [] compte = ps.executeBatch();⑶
conn.commit();
}attraper(Exception e){
e.printStackTrace();
} enfin{
essayer{
si(ps!=null) {
ps.clearParameters();
ps.close();
ps=nul ;
}
}catch(SQLException e){}
DBUtils.closeConnection(conn);
}
}
public long getLast(){
renvoie lastExecuteTime ;
}
public void run(){
depuis longtemps = System.currentTimeMillis();
if ((maintenant - lastExecuteTime) > executeSep) {
//System.out.print("lastExecuteTime:"+lastExecuteTime);
//System.out.print(" maintenant :"+maintenant+"n");
// System.out.print(" sep="+(maintenant - lastExecuteTime)+"n");
lastExecuteTime=maintenant ;
exécuterUpdate();
}
autre{
//System.out.print("attendre "+(maintenant - lastExecuteTime)+" secondes :"+"n");
}
}
}
//Remarque : si votre pilote de base de données prend en charge le traitement par lots, vous pouvez supprimer les commentaires avant le code marqué par ⑵ et ⑶ et ajouter la
classe de commentaires avant le code ⑴. Voici l'appel suivant dans JSP.
<%
CountBean cb=nouveau CountBean();
cb.setCountId(Integer.parseInt(request.getParameter("cid")));
CountCache.add(cb);
out.print(CountCache.list.size()+"<br>");
CountControl c=nouveau CountControl();
c.run();
out.print(CountCache.list.size()+"<br>");
%>