java - Multipile update-Anweisungen in MySql
also ich habe eine software, die im Grunde downloads 1,5 K Spiel-server Adresse von meiner MySQL-db. Es dann pings, alle von Ihnen und laden Sie dann die Informationen wie online-Spieler zurück in die Datenbank. Der Prozess sieht wie folgt aus:
- Download-server-Adresse
- Ping an den Server und erhalten Informationen
- Hochladen von Daten zurück in die Datenbank
Bisher habe ich lösen können, der Teil, wo es den download der server-host-Namen und pings aber das problem entsteht, wenn die Aktualisierung der Server.
Aktualisieren, ich dachte über die Verwendung einer for-Schleife zu konstruieren, die eine GROßE Zeichenfolge von vielen update-Anweisungen, und führen Sie es auf einmal aber das ist anfällig für sql-Injektionen. Also ideal würde man wollen, verwenden Sie vorbereitete Anweisungen.
Den SQL-update-Anweisung, die ich verwende, ist:
UPDATE serverlist SET `onlineplayers` = '3', maxplayers = '10',
name = 'A game server' WHERE `ip` = 'xxx.xxx.xxx.xxx' AND `port` = 1234;
Also meine Frage ist:
Wie kann ich führen alle 1,5 K updates statements mit parametrisierten Abfragen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie bei google nach "jdbc bulk update" erhalten Sie viele Ergebnisse wie diese oder diese eine.
Letzteres ist ein Beispiel wie dieser:
Klingt wie Sie wollen ein batch-SQL-update. Prepared statements sind dein Freund. Hier ist ein Beispiel für die Verwendung von vorbereiteten Anweisungen in der batch:
http://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/
Mit prepared statements macht Einstellparameter einfacher und erlaubt es der DB um effizient mehrere updates. Ausführung mehrerer SQL-strings funktionieren würde, wäre aber ineffizient, da jede SQL-Strings an das DBMS, analysiert, kompiliert und anschließend ausgeführt. Mit prepared statements die SQL geparst und kompiliert dann mal wiederverwendet werden für zukünftige Aktualisierungen mit verschiedenen Parametern.
Ein weiterer wichtiger Schritt, dass Sie sollten sich bewusst sein über, während die MySQL-batch-update - /insert-JDBC-Verbindung propertie rewriteBatchedStatements=true ( standardmäßig false ). Ohne batch-Modus nutzlos ist.
Es kostete mich 1 Tag zu "Update Fehler", bis ich heraus gefunden das.
Wenn Sie kleine Anzahl von Linien, und schließen Sie die client-zu-DB-Position ( 1ms ping ) , Sie selbst können nicht erkennen, dass Sie in "fake-batch-Modus" , aber wenn ich die switch-Umgebung auf remote-client ( ping=100ms ) und 100k Zeilen zu aktualisieren , die es dauern würde, 4 Stunden von "batch-Modus" update " mit Standard - rewriteBatchedStatements=false und nur 2minutes mit rewriteBatchedStatements=true
Erstellen Sie eine vorbereitete Anweisung:
Dann Schleife durch die Liste, und bei jeder iteration, tun
Für eine bessere Leistung, können Sie auch batch-updates.
Lesen Sie die JDBC-tutorial.