Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo ich bin ein totaler Java einsteiger, ich habe ein MySQL "Save System" welches aber total langsam geht. Ich vermute das ich das mit den Queries falsch gemacht habe ich bitte um Hilfe.
Java:
try {
System.out.println("Disable");
Class.forName( "com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://Link", "DatenBank", "Passwort");
con.setReadOnly(false);
Statement stmt = con.createStatement();
int c = 1;
for(int i = 1; i < Blocks; i++) {
ResultSet rs = stmt.executeQuery("SELECT * FROM `bv-world` WHERE `block`='"+ BlockID.get(i) +"' AND `world`='" + World.get(BlockID.get(i)) + "'");
if(!rs.first()) {
stmt.executeUpdate("INSERT INTO `d011fd1a`.`bv-world` (`block`,`text`,`world`) VALUES ('"+
BlockID.get(i)+"','"+Text.get(BlockID.get(i))+"','" + World.get(BlockID.get(i)) + "')");
}
else {
stmt.executeUpdate("UPDATE `bv-world` SET `text`='" + Text.get(BlockID.get(i)) + "' WHERE `block`='" + BlockID.get(i) + "' AND `world`='" + World.get(BlockID.get(i)) + "'");
}
if(c == 10) {
System.out.println("Blocks: " + (i-1) + "/" + (Blocks-1) + " |" + Math.round((i*100)/Blocks) + "%");
c = 0;
}
rs.close();
i++;c++;
}
stmt.close();
con.close();
System.out.println(Blocks-1 + " Blocks wurden gespeichert.");
} catch (Exception e) {
System.out.println("*** Fehlermeldung *** -> " + e);
}
keine weiteren Infos? wieviele Blocks, wie langsam ist es?
da mag es sichere schnellere Befehle geben, interessanter aber vielleicht noch:
wie oft findet dieses Speichern statt, zu welchen Zweck? ständig den aktuellen (Spiel?-)Stand in die DB,
dass ist doch nix
es speichert ca. 10 - 15 Blocks pro Sekunde.
Es speichert nur 1mal wenn es Beendet oder Neugestartet wird.
Das wird Manuell gemacht also meistens alle 5 Stunden oder später.
Edit: Insgesamt sollen 100 000 gespeichert werden. Dies dauert ca. 1 Stunde.
Ich habe auch eine MySQL lade Funktion diese lädt 100 000 Blocks in 6 Sekunden.
ein Framework wie Hibernate kann vielleicht intern besser vorgehen
alle Befehle in eine SQL-Textdatei schreiben, diese an die Datenbank geben
und noch eine allgemeine Entscheidung:
was bringen dir die 100.000 Steine überhaupt einzeln in der DB, werden dort Queries ausgeführt, nicht auf den evtl.
aktuelleren Programmstand?
speichere die Daten alternativ nur in einer Datei, z.B. XML, oder die 5 MB-Daten als einen Eintrag in der DB
wenn du das Speichern aktuell wegläßt, nur die SQL zusammenbaust,
geht es dann eigentlich schnell oder auch schon langsam, etwa weil World.get(BlockID.get(i)) lange braucht?
allein zur schöneren Ansicht solltest du solche Blöcke nicht x-mal eintippen, Variablen anlegen