A veces es necesario contar el número de clics para cada artículo. Si es necesario actualizar la base de datos cada vez que se navega, el rendimiento será muy alto cuando el número de visitas sea grande. Una mejor manera es almacenar primero en caché los datos que se van a actualizar y luego utilizar el procesamiento por lotes de la base de datos a intervalos regulares para actualizar la base de datos en lotes. El código fuente es el siguiente:
CountBean.java
/*
*ContarDatos.java
*
* Creado el 18 de octubre de 2006, 4:44 pm
*
* Para cambiar esta plantilla, elija Herramientas | Opciones y busque la plantilla en
* el nodo Creación y gestión de código fuente. Haga clic con el botón derecho en la plantilla y elija.
* Abrir. Luego puede realizar cambios en la plantilla en el Editor de código fuente.
*/
paquete com.tot.count
/**
*
* @autor http://www.tot.name
*/
clase pública CountBean {
tipo de recuento de cadena privada;
int recuento;
/** Crea una nueva instancia de CountData */
público CountBean() {}
setCountType público vacío (tipos de recuento de cadenas) {
this.countType=countTypes;
}
setCountId vacío público (int countIds) {
this.countId=countId;
}
cadena pública getCountType(){
devolver tipo de recuento;
}
público int getCountId(){
ID de recuento de retorno;
}
}
CountCache.java
/*
*CountCache.java
*
* Creado el 18 de octubre de 2006 a las 5:01 pm
*
* Para cambiar esta plantilla, elija Herramientas | Opciones y busque la plantilla en
* el nodo Creación y gestión de código fuente. Haga clic con el botón derecho en la plantilla y elija.
* Abrir. Luego puede realizar cambios en la plantilla en el Editor de código fuente.
*/
paquete com.tot.count;
importar java.util.*;
/**
*
* @autor http://www.tot.name
*/
clase pública CountCache {
lista LinkedList estática pública = nueva LinkedList();
/** Crea una nueva instancia de CountCache */
CountCache público() {}
agregar vacío estático público (CountBean cb) {
si(cb!=nulo){
lista.add(cb);
}
}
}
CountControl.java
/*
*CountThread.java
*
* Creado el 18 de octubre de 2006, 4:57 pm
*
* Para cambiar esta plantilla, elija Herramientas | Opciones y busque la plantilla en
* el nodo Creación y gestión de código fuente. Haga clic con el botón derecho en la plantilla y elija.
* Abrir. Luego puede realizar cambios en la plantilla en el Editor de código fuente.
*/
paquete com.tot.count;
importar tot.db.DBUtils;
importar java.sql.*;
/**
*
* @autor http://www.tot.name
*/
clase pública CountControl{
private static long lastExecuteTime=0;//Última hora de actualización private static long ejecutarSep=60000;//Definir el intervalo de actualización en milisegundos/** Crea una nueva instancia de CountThread */
control de conteo público() {}
vacío sincronizado público ejecutarUpdate(){
Conexión de conexión = nulo;
Declaración preparada ps=null;
intentar{
conexión = DBUtils.getConnection();
conexión.setAutoCommit(falso);
ps=conn.prepareStatement("actualizar t_news set hits=hits+1 donde 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 [] recuentos = ps.executeBatch();⑶
conexión.commit();
}catch(Excepción e){
e.printStackTrace();
} finalmente{
intentar{
si(ps!=nulo) {
ps.clearParameters();
ps.cerrar();
ps=nulo;
}
}catch(SQLException e){}
DBUtils.closeConnection(conexión);
}
}
público largo getLast(){
devolver últimoExecuteTime;
}
ejecución pública vacía(){
largo ahora = System.currentTimeMillis();
if ((ahora - lastExecuteTime) > ejecutarSep) {
//System.out.print("lastExecuteTime:"+lastExecuteTime);
//System.out.print(" ahora:"+ahora+"n");
// System.out.print(" sep="+(ahora - lastExecuteTime)+"n");
lastExecuteTime=ahora;
ejecutarActualización();
}
demás{
//System.out.print("esperar "+(ahora - lastExecuteTime)+" segundos:"+"n");
}
}
}
// Nota: si el controlador de su base de datos admite el procesamiento por lotes, puede eliminar los comentarios antes del código marcado por ⑵ y ⑶, y agregar la
clase de comentario antes del código ⑴. La siguiente es la siguiente llamada en JSP.
<%
CountBean cb=nuevo CountBean();
cb.setCountId(Integer.parseInt(request.getParameter("cid")));
CountCache.add(cb);
out.print(CountCache.list.size()+"<br>");
CountControl c=nuevo CountControl();
c.ejecutar();
out.print(CountCache.list.size()+"<br>");
%>