# Zugriff auf ein Resultset



## Lito (21. Sep 2017)

Hallo Experten, habe eine sehr banale Frage und sitze gerade auf dem Schlauch:

Ich hole mir ein Resultset mittels Hibernate in meinen Speicher:
List<?> result = dbc.getResultDATDVC(Date.valueOf("2017-09-01"), Date.valueOf("2017-09-15"));

Soweit so gut Ich bekomme die Richtige Menge an Zeilen (Je Zeile 4 Werte (VARCHAR und BIG Decimal)) diese sehe ich im Debugger. Jetzt zu meinem banalen Problem:
Wie kann ich auf die Spalten pro Zeile zugreifen:
for (int i = 0; i < result.size(); i++ ) {
            System.out.println(result.get(i));
liefert mir logischerweise nur die Referenzen pro Zeile... also sowas in der Art wie [Ljava.lang.Object;@394a2528.

Wie kann ich auf die Werte in diesen Objekten zugreifen ?

Wenn ich das gleiche mit einer Sequenz mache bekomme ich folgendermaßen meinen Wert:
List<?> response = session.createSQLQuery("Select DATDVCSEQID.NEXTVAL from Dual").list();
        BigDecimal maxID = (BigDecimal) response.get(0);

Ich hoffe ich habe mich verständlich ausgedrückt.

Vielen Dank im Voraus schon mal.


----------



## Flown (21. Sep 2017)

Lito hat gesagt.:


> liefert mir logischerweise nur die Referenzen pro Zeile... also sowas in der Art wie [Ljava.lang.Object;@394a2528.


Ljava.langObject ist ein Object[] und du kannst einfach mit:

```
result.get(i)[0]
```
 zugreifen.


----------



## Lito (25. Sep 2017)

Hallo Flown vielen Dank für deine Antwort, das war auch mein erster Gedanke mit [] darauf zuzugreifen oder mit hasnext oder sowas darüber zu itterieren.
Wenn ich mit [] darauf zugreifen will markiert mir Eclipse das als Fehler mit der Meldung : Der Typ des Ausdrucks muss ein array-Typ sein; er wurde jedoch zu capture#4-of ? aufgelöst

Was für ein Typ soll capture#4 sein ?


----------



## mrBrown (25. Sep 2017)

Lito hat gesagt.:


> Was für ein Typ soll capture#4 sein ?


Dieser hier: `?` 

Gib der Liste doch den richtigen generischen Typ, den, den `dbc.getResultDATDVC` zurück gibt.


----------



## Lito (25. Sep 2017)

Ja das habe ich auch gerade gedacht.... war am Freitag wohl nicht ganz da...Dankschön.


----------



## Lito (25. Sep 2017)

Leider klappt das Casten nicht:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to hibernate.Reporting_DB
    at hibernate.DBConnection.main(DBConnection.java:30)

Ich kann nach <Object[]> Casten und dann mittels [] zugreifen. Schöner wäre allerdings eine List<Reporting_DB> zu instantiieren. Ich kann mir schon Denken warum. Kann es sein das mein Programm nicht weiß bei welcher der 4 Werte entsprechendes Äquivalent zur Zuweisung genutzt werden soll. Muss ich also beim erstellen der List<Reporting_DB> jedes Element vorher einmal händisch instantiieren.
Ich habe es jetzt so gelöst:

public List<Reporting_DB> getResultDATDVC(Date DtFrom, Date DtTo){
        List<Object[]> responseAR = (List<Object[]>)session.createSQLQuery("Select * FROM REPORTING_DB").list();
        List<Reporting_DB> response = new  ArrayList<>();
        for (Object[] o : responseAR) {
            response.add( new Reporting_DB(o[0].toString(), o[3].toString(), Double.parseDouble(o[2].toString()), Integer.parseInt(o[1].toString())));
        }
        return response;
    }

Ich hole mir zuerst die Daten als Object Array in den Speicher um dann mit einer Schleife darüber zu iterieren anschließend erzeuge ich mittels new ein Reporting_DB Objekte die ich dann meiner Liste hinzufüge.

...kommt mir irgendwie umständlich und unschön vor.


PS: wie macht man eigentlich eine Codebox in seinem Posting?

Hat jemand eine bessere Idee ?


----------



## mrBrown (25. Sep 2017)

Nutzt du Hibernate nicht als ORM oder warum musst du mit `Object` hantieren?


----------



## Lito (25. Sep 2017)

mrBrown hat gesagt.:


> Nutzt du Hibernate nicht als ORM oder warum musst du mit `Object` hantieren?



Sorry das verstehe ich nicht so ganz is für mich alles Neuland...
ORM = Objekt Relationales Mapping ? 
Ich nutze zwar ein Mapping aber ohne Type Bezeichnungen:
<hibernate-mapping>
    <class name="hibernate.Reporting_DB" table="REPORTING_DB">
        <id name="isin">
            <generator class="assigned"></generator>
        </id>

        <property name="anzahl"></property>
        <property name="volume"></property>
        <property name="ccy"></property>
    </class>

</hibernate-mapping>

meinst du das man hier den Typ von Anfang an festlegt, mittels Type=String oder so? 
Wird mir dann der entsprechende Typ geliefert ?


----------

