Zunächst möchte ich sagen, dass es sich bei dieser Frage nicht um JOIN oder UNION handelt. Auch gibt es einige Antworten auf Stack-Überlauf, die ich versucht habe, aber ich habe immer noch Probleme. (Beispiel: Multiple queries executed in java in single statement)jdbc - Mehrere Select-Anweisungen in einer Abfrage
Problem:
Ich mag Daten aus zwei Tabellen abzurufen, die ich nicht JOIN oder UNION verwenden, kann tun, da sie verschiedene Arten von Daten enthalten, und ich bin nach unterschiedlicher Anzahl von Zeilen aus jeder Tisch. Der Grund, warum ich es auf einmal machen möchte, ist Effizienz, aber wenn jemand mich davon überzeugen kann, dass zwei Anrufe anstelle von einem fast keinen Unterschied machen, dann werde ich mein Problem gerne lösen (obwohl es immer noch nett wäre) nur)
-Code zu wissen, wie eine Abfrage verwenden:
Basierend auf this, schrieb ich den folgenden Code (Auszug):
String sql = "SET @organizationId = 0;" +
"SELECT @organizationId := Id 'Id', Name FROM Organization WHERE Id = ?;" +
"SELECT AssociatedOrganizationId FROM OrganizationAssociations WHERE OrganizationId = @organizationId;";
Connection conn = null;
try {
conn = dataSource.getConnection();
CallableStatement cs = conn.prepareCall(sql);
cs.setInt(1, organizationId);
boolean isResultSet = cs.execute();
if (!isResultSet) {
logger.error("getOrganization - retrieved result is not a ResultSet");
}
OrganizationDto organization = null;
ResultSet rs = cs.getResultSet();
if (rs.next()) {
// create organization object using retrieved data
}
rs.close();
Verhalten das Problem verursacht:
cs.execute() gibt immer false zurück.
Beobachtungen und Aktionen nahm ich zu versuchen, das Problem zu beheben:
Wie bereits erwähnt here und in Java-Dokumentation, Callable zum Aufrufen gespeicherter Prozeduren verwendet zu werden, wurde entwickelt. Gespeicherte Prozeduren selbst geben niemals einen Wert zurück und dies kann nur durch OUT-Parameter erreicht werden. Bedenkt, dass es mich nicht überrascht, dass .execute() false zurückgibt. Ich habe mich verändert jedoch Callablestatement-PreparedStatement und Statement aber, dass in Bezug auf das Ergebnis nicht viel ändern (cs.getResultSet() noch zurück null)
Die Antworten, die ich bin Suche:
1. Ich würde gerne wissen, wie kann ich abrufen Daten aus mehreren Tabellen mit einer Abfrage mit mehreren SELECT-Anweisungen in jdbc erreichen. Das soll ohne JOINS, UNIONS usw. erreicht werden. Ich möchte die Abfrage, die ich schon habe, möglichst nutzen können (die Abfrage funktioniert einwandfrei - getestet in HeidiSQL).
2. (Optional) Wenn es jemanden gibt, der denkt, dass zwei Abfragen keinen großen Unterschied in Bezug auf Datenbanklast und Leistung machen, dann möchte ich überzeugt sein, dass dies tatsächlich der Fall ist.
Update # 1:
zu klären, ist dies die Daten, die meine Abfrage zurückgibt:
ResultSet # 1:
ID, Name
1 "org1_name"
ResultSet # 2:
AssociatedOrganizationId
Verwenden Sie eine Proc, zwei Cursor zurück und verwenden Sie sie, welches Problem Sie in Callable-Anweisung konfrontiert? –
Ist es möglich, die Abfrage so zu verwenden, wie sie ist, anstatt eine gespeicherte Prozedur zu erstellen? Ich komme von .NET Hintergrund und Abfragen wie diese sind nicht ungewöhnlich. Wie beschrieben, gibt CallableStatement.execute() in meinem Fall immer false zurück (wahrscheinlich, weil ich keine gespeicherte Prozedur mit OUT-Parameter anrufe) – JakeDiscBrake
Danke @GordThompson. Wenn jemand anderes bestätigen könnte, dass dies in der Tat die einzige Möglichkeit ist, dies in MySQL zu tun, dann erstelle ich einen gespeicherten Prozess und das ist, wie ich das lösen werde. – JakeDiscBrake