Mysql: View wird nicht richtig ausgelesen

Spechter

Mitglied
Hallo,
ich habe ein Problem. Und zwar will ich die Daten aus einer View mittels Java auslesen. Ich benütze dabei die Klasse Resultset und später die Klasse Result. Jedoch werden die Spalten die ich im View anderst genannt hatte (mit zb nachname AS p_nachname) nicht richtig übernommen, sondern behalten den orginal Spaltenname.
Ich weiß auch wo der Fehler ist, weiß aber nicht wie ichs beheben kann.
Die View sieht folgerndermaßen aus (etwas abgespeckt):
Code:
CREATE VIEW versuchsfahrzeuge AS
SELECT v.idVersuchsfahrtenfahrzeug, v.versuchsfahrtID, v.fahrzeugID, v.fahrzeugBetreuerID, v.lfnr, v.projekt, v.abgelesen_von, v.bemerkung,
  t.nachname AS p_nachname, t.vorname AS p_vorname, t.abteilung AS p_abteilung,
  a.nachname AS abgemessen_nachname, a.vorname AS abgemessen_vorname, a.abteilung AS abgemessen_abteilung
FROM versuchsfahrtenfahrzeug v
LEFT JOIN person_select t ON (v.fahrzeugBetreuerID = t.idPerson)
LEFT JOIN person_select a ON (v.abgelesen_von = a.idPerson);
und meine Abfrage für die Datenbank sieht so aus:
Code:
try{
// execute query
	stmt = conn.createStatement();
	rs = stmt.executeQuery(query);
	r = ResultSupport.toResult(rs);
}catch(Exception ex){
 ...
}{finally{
// release resources
	if(rs != null){						rs.close();
		rs = null;
	}
	if(stmt != null){
	stmt.close();
	stmt = null;
	}
}
und zwar wird das Ergebnis komischerweise an dieser Stelle falsch umgewandelt:
Code:
	r = ResultSupport.toResult(rs);
Sprich der Resultsupport zeigt mir die richtigen Ergebnisse an (auch richtige Spaltennamen), jedoch wenn ich das in ein Result umwandle und danach die ColumnNames anschaue, dann werden die Spalten die ich umbenannt habe nicht richtig angezeigt.
Also er erkennt dann in meinem Fall 2x die Spalte vorname, nachname und abteilung obwohl diese ja egtl unterschiedlich heißen müssten und die Spalte vorname zB gar nicht existieren dürfte.
Wenn ich dasselbe direkt im MySQL Command Line Client anzeigen lasse, funktioniert auch alles wunderbar. Es muss also an dem ResultSupport.toResult liegen...
Was kann ich da machen um das zu beheben

Grüße Stefan
 
Hi,

bei einem reinen ResultSet wird original die View zurückgegeben, z.B.

SELECT * FROM MyView lieferte, egal ob in Java oder im DBMS, die View mit den dort definierten Spaltennamen. Du kannst von Java aus sogar nach den in der View definierten Spaltennamen sortieren.

Ich würde vermuten (ohne Dein SQL getestet und Deine Original Abfrage gesehen zu haben), dass Du irgendeine Hilfsfunktion benutzt (in Java), die Konvertierungen vornimmt, z.B. den Originalspaltennamen und nicht den View-Spaltennamen, anzuzeigen:

API: http://java.sun.com/products/jsp/jstl/1.1/docs/api/javax/servlet/jsp/jstl/sql/ResultSupport.html

Methode: "toResult(java.sql.ResultSet rs)
Converts a ResultSet object to a Result object."

Normalerweise funktioniert so etwas ohne Probleme, egal ob by Oracle oder MySQL.

Grüße, Tim
 
Zuletzt bearbeitet:
Hallo Tim,
danke für deine Antwort. Ich habe jedoch das Problem bereits gelöst.
Und zwar war das eigentliche Problem folgendes:
Zu einem ResultSet gibt es ja noch die ResultSetMetaData. In dieser gibt es die Funktion getColumnName und die Funktion getColumnLabel.
GetColumnName gibt dabei den orginal Spaltenname an und getColumnLabel gibt den von mir unbenannten Spaltenname an.
Die Funktion "ResultSupport.toResult(rs);" benützt jedoch die columnNames und nicht die Labels, deswegen wurden die falsch angezeigt.
Ich habe das Problem jetzt so gelöst, dass ich einfach ne eigene Methode geschrieben habe, die den ResultSet umwandeln und dabei die Labels benützt.
Grüße Stefan
 

Neue Beiträge

Zurück