Hallo, ich habe mich gefragt, ob es möglich ist, so etwas mit JDBC auszuführen, da es derzeit eine Ausnahme darstellt, obwohl dies im MySQL-Abfragebrowser möglich ist.
"SELECT FROM * TABLE;INSERT INTO TABLE;"
Ich weiß zwar, dass es möglich ist, die SQL-Abfragezeichenfolge zu teilen und die Anweisung zweimal auszuführen, aber ich habe mich gefragt, ob es dafür einen einmaligen Ansatz gibt.
String url = "jdbc:mysql://localhost:3306/";
String dbName = "databaseinjection";
String driver = "com.mysql.jdbc.Driver";
String sqlUsername = "root";
String sqlPassword = "abc";
Class.forName(driver).newInstance();
connection = DriverManager.getConnection(url+dbName, sqlUsername, sqlPassword);
allowMultiQueries=true
.Antworten:
Ich habe mich gefragt, ob es möglich ist, so etwas mit JDBC auszuführen.
Ja, es ist möglich. Soweit ich weiß, gibt es zwei Möglichkeiten. Sie sind
Die folgenden Beispiele zeigen die beiden oben genannten Möglichkeiten.
Beispiel 1 : (Um mehrere Abfragen zuzulassen):
Beim Senden einer Verbindungsanforderung müssen Sie eine Verbindungseigenschaft
allowMultiQueries=true
an die Datenbank-URL anhängen . Dies ist eine zusätzliche Verbindungseigenschaft zu denen , wenn bereits vorhanden einige, wieautoReConnect=true
, etc .. Die zulässigen Werte fürallowMultiQueries
Immobilien sindtrue
,false
,yes
, undno
. Jeder andere Wert wird zur Laufzeit mit einem abgelehntSQLException
.Wenn eine solche Anweisung nicht übergeben wird, wird eine
SQLException
ausgelöst.Sie müssen
execute( String sql )
oder seine anderen Varianten verwenden, um Ergebnisse der Abfrageausführung abzurufen.Um die Ergebnisse zu durchlaufen und zu verarbeiten, benötigen Sie die folgenden Schritte:
Beispiel 2 : Folgende Schritte:
select
, undDML
Abfragen.CallableStatement
.ResultSet
s erfassen, die in der Prozedur ausgeführt werden.DML-Ergebnisse können nicht erfasst werden, können jedoch andere ausgeben,
select
um festzustellen, wie die Zeilen in der Tabelle betroffen sind.
Beispieltabelle und Vorgehensweise :
Aufrufprozedur von Java :
quelle
Sie können die Stapelaktualisierung verwenden, Abfragen müssen jedoch Aktionsabfragen (dh Einfügen, Aktualisieren und Löschen) sein
quelle
Hinweis: Wenn Sie mehr als eine Verbindungseigenschaft haben, trennen Sie diese durch:
Um Ihnen etwas zu geben wie:
Ich hoffe das hilft jemandem.
Grüße,
Glyn
quelle
Basierend auf meinen Tests lautet das korrekte Flag "allowMultiQueries = true".
quelle
Warum versuchst du nicht, eine
Stored Procedure
dafür zu schreiben ?Sie können das
Result Set
rausholen und im selben könnenStored Procedure
Sie,Insert
was Sie wollen.Die einzige Sache ist, dass Sie möglicherweise nicht die neu eingefügten Zeilen in der erhalten,
Result Set
wenn SieInsert
nach demSelect
.quelle
Ich denke, dies ist der einfachste Weg für die Auswahl / Aktualisierung / Einfügung / Löschung von Multys. Sie können nach der Auswahl mit executeUpdate (str) so viele Aktualisierungen / Einfügungen / Löschvorgänge ausführen, wie Sie möchten (Sie müssen zuerst eine Auswahl treffen (ggf. einen Dummy)) (verwenden Sie einfach new int (count1, count2, ...)). und wenn Sie eine neue Auswahl benötigen, schließen Sie 'Anweisung' und 'Verbindung' und machen Sie neue für die nächste Auswahl. Wie Beispiel:
Ich hoffe, es hilft
quelle