Java - Filas repetidas en base de datos

   
Vista:

Filas repetidas en base de datos

Publicado por Hadock (13 intervenciones) el 14/04/2008 14:00:48
Buenos dias,

Tengo un problema en mi aplicacion. He creado un hilo que cada x tiempo se despierta y almacena la informacion de unos archivos en una base de datos.

Lo hace correctamente, pero por ejemplo si ejecuto la aplicacion, la primera vez guarda todas las entradas leidas en el archivo, y en la segunda ademas de las nuevas vuelve a almacenarla informacion que habia sido guardada antes, por lo que tengo mucha informacion duplicada. (La tercera vez que guarde volvera a repetirlo y asi sucesivamente).

He pensado en ir guardando en un String la informacion que ha sido almacenada en la base de datos, y las siguientes veces que vaya a actualizarla, compare la informacion de los archivos con el string y si estos han sido anteriormente almacenados no vuelva a repetir esta accion, pero si alguien sabe de una solucion mas optima se lo agradeceria muchisimo.

Aqui os dejo parte del programa que ejecuta el hilo:

import java.util.*;
public class DBThread extends Thread
{
Calendar c;
Date d;
public DBThread()
{
}
public void run()
{
c=new GregorianCalendar();
int year=c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
DBConector dbc=new DBConector();
while(true)
{
System.out.println("while");
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// if(minute==0)
//{
String y,m,d;
if((year%100)<10)
y="0"+year;
else
y=""+year;
if(month<10)
m="0"+month;
else
m=""+month;
if(day<10)
d="0"+day;
else
d=""+day;
String LogName="ex"+y+m+d+".log";
//LogName="ex051108.log";
dbc.setData(LogName);
//}
try
{
sleep(60000);
}
catch(Exception e)
{
System.out.println(e);
}
}
}
}

y la funcion setData:

public void setData(String LogName)
{
RemoteObject ro;
int i=0;
Conection c;
String[] data;
try
{
ro=new RemoteObject();
data=ro.FindLog(LogName);
while(data[i]!=null)
{
if(data[i].substring(0,1).compareTo("#")!=0)
{
c=divideString(data[i]);
DBConector dbc=new DBConector();
String datetime=c.getDate().getYear()+"/"+c.getDate().getMonth()+"/"+c.getDate().getDay();
datetime+=""+c.getDate().getHour()+":"+c.getDate().getMinutes()+":"+c.getDate().getSeconds();
String sql="INSERT INTO log_stats values (?,?,?,?,?,?,?,?,?,?)";
PreparedStatement ps=dbc.c.prepareStatement(sql);
ps.setString(1,null);
ps.setString(2,datetime);
ps.setString(3,c.getServer());
ps.setString(4,c.getMethod());
ps.setInt(5,c.getUser().getPort());
ps.setString(6,c.getUser().getIP());
ps.setString(7,c.getNavigator());
ps.setInt(8,c.getSc_status());
ps.setInt(9,c.getSc_substatus());
ps.setInt(10,c.getSc_win_substatus());
ps.executeUpdate();
}
i++;
}
}
catch(Exception e)
{
System.out.println(e);
}
}

Gracias a los que os tomais la molestia de leerlo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Filas repetidas en base de datos

Publicado por Tom (910 intervenciones) el 14/04/2008 18:34:29
La mejor solución es que busques algún campo que te sirva de clave única y crees un índice (que no permita claves duplicadas) para tu tabla en la B.D.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar