Pozdrav! 🙂
Ovako, imam 5 threadova koji vrse web scraping i upisuju rezultate u bazu podataka.
Citao sam na netu ponesto o sinhronizaciji ali daleko od toga da razumem 😀
Funkcija u objektu koji se povezuje na bazu mi je synchronized.
Ne znam koliko sam jasan...
Program ili radi savrseno ili mi izbaci mysqlexception za duplikat primary key...
Evo koda iz klase za konekciju...
Threadovi se konektuju praveci instancu objekta i koriste funkciju connect() .
Ako treba, postavicu i stackTrace error-a i kod klase sa thread-ovima.
Bio bih veoma zahvalan ako bi me neko usmerio u pravom smeru.
Pozdrav i hvala!
Ovako, imam 5 threadova koji vrse web scraping i upisuju rezultate u bazu podataka.
Citao sam na netu ponesto o sinhronizaciji ali daleko od toga da razumem 😀
Funkcija u objektu koji se povezuje na bazu mi je synchronized.
Ne znam koliko sam jasan...
Program ili radi savrseno ili mi izbaci mysqlexception za duplikat primary key...
Evo koda iz klase za konekciju...
Kod:
public class connectDatabase {
private String url;
private String username;
private String password;
private Vector data;
private Vector car;
private int aktuelnaStrana;
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
public connectDatabase(String url, String username, String password, Vector data, int aktuelnaStrana)
{
this.url=url;
this.username=username;
this.password=password;
this.data=data;
this.aktuelnaStrana=aktuelnaStrana;
}
public synchronized void connect()
{
try
{
String name = Thread.currentThread().getName();
System.out.println(name + ":accessed...");
Class.forName("com.mysql.jdbc.Driver").newInstance();
con=DriverManager.getConnection(url,username,password);
stmt=con.createStatement();
int id;
//proveravamo da li postoji upisa u bazi (id je primary key), nalazimo zadnji id i nastavljamo od njega
String upit="select id from cars where Id is NOT NULL";
rs=stmt.executeQuery(upit);
if(!rs.next())
{
//nema upisa, tj. id == null
id=0;
}
else
{
upit="select Max(Id) from cars";
rs=stmt.executeQuery(upit);
rs.next();
id=Integer.valueOf(rs.getString(1));
id++;
}
aktuelnaStrana++;
//System.out.println("Upisujemo rezultate "+aktuelnaStrana+" strane u bazu...");
for(int i=0;i<data.size();i++)
{
car=new Vector();
car=(Vector)data.elementAt(i);
String marka=car.elementAt(1).toString();
String model=car.elementAt(2).toString();
String godiste=car.elementAt(3).toString();
String url=car.elementAt(6).toString();
String slika=car.elementAt(5).toString();
String kilometraza=car.elementAt(4).toString();
String cena=car.elementAt(0).toString();
//public static final String EURO = "\u20AC";
cena=cena.replace("€","EUR");
upit="insert into cars (Id,marka,cena,model,godiste,kilometraza,glavnaSlika,urlDetails) values ('"+id+"','"+marka+"','"+cena+"','"+model+"','"+godiste+"','"+kilometraza+"','"+slika+"','"+url+"')";
stmt.executeUpdate(upit);
id++;
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Ako treba, postavicu i stackTrace error-a i kod klase sa thread-ovima.
Bio bih veoma zahvalan ako bi me neko usmerio u pravom smeru.
Pozdrav i hvala!
Poslednja izmena od urednika: