problem mit resultset->arraylist

Status
Nicht offen für weitere Antworten.

kubi

Mitglied
hoi!

ich hab ein problem mit meinem resultset, dass ich in eine arraylist geschrieben habe.

code:

....
Code:
try
{
Statement st= conn.createStatement();

...

st.executeQuery("SELECT a, b FROM myTable ORDER BY a,b");

ResultSet rs = st.getResultSet();

ArrayList al = new ArrayList();
while(rs.next())
{
ArrayList rec = new ArrayList();

for(int i=0; i<2; i++)
{
Object val = rs.getObject(i);
rec.add(val);
}
rs.close();
st.close();
}
catch...
mein table sieht so aus:

a | b
: :
117 | 268.5
117 | 278.5
117 | 300.5
118 | 271
118 | 272.5
118 | 292
119 | 274.5
119 | 276
119 | 286.5
119 | 306.5
120 | 275
120 | 276.5
120 | 296
: :

was ich gerne machen moechte ist zB fuer a = 120: 296-276.5, 276.6-275 und das fuer alle a

wenn ich aber meine arraylist ausgebe bekomme ich nur ganze row's in der form [120,296].

wie kann ich solch eine subtraktion ueber das ganze resultset hinbekommen? muss ich da eventuell einen zusaetzlichen index (auto increment) in die tabelle einfuegen? oder klappt das auch mit java?

kann mir da jemand weiterhelfen?

danke!
k.
 

Murray

Top Contributor
Die drei b's für a =120 stehen ja in drei verschiedenen Rows des ResultSets, daher fehlt ein next. Wenn Du Dir ganz sicher sein kannst, dass immer drei Zeilen mit dem gleichen a kommen, dann könnte es wohl so gehen:
Code:
ArrayList recs = new ArrayList(); //--- Liste von Listen
while(rs.next()) {
  ArrayList rec = new ArrayList(); //--- diese Liste enthält 3 b's zu einem a

  for(int i=0; i<2; i++) {
    if (  i > 0) rs.next(); //--- für i=0 wurde das next() bereits in der while-Bedingung gemacht
    Object val = rs.getObject(1); //--- getObject(0) liefert a, getObject(1) das in dieser Zeile zugeh. b
    rec.add(val);
 }
 recs.add( rec);
}

Sicherer wäre es wohl, nur eine Schleife zu haben und sich das letzte a zu merken. Wenn man auf ein anderes a trifft als beim letzten Durchlauf, dann muss man eine neue Zeile anfangen.
 

Kawa-Mike

Mitglied
nimm das if(i>0)rs.next() ganz aus der for Schleife heraus. Du brauchste es doch nur einmal für jede Zeile im Resultset auszuführen. Dann ist das if auch überflüssig.
also:
. . .
rs.next()
for( . . .)
 

Murray

Top Contributor
Kawa-Mike hat gesagt.:
nimm das if(i>0)rs.next() ganz aus der for Schleife heraus. Du brauchste es doch nur einmal für jede Zeile im Resultset auszuführen.
Die Aussage verstehe ich nicht: das Problem besteht doch genau darin, dass das ResultSet n-mal drei Zeilen enthält, aus denen dann n Dreiergruppen gebilden werden sollen, oder nicht?
 

Kawa-Mike

Mitglied
Normalerweise weisst du nicht wieviele Zeilen das Resultset hat, es hängt von der Anzahl treffen ab, die die WHERE bedingung liefert. Also prüfst du mit
while(rs.next())
ob es noch einen Datensatz ( Zeile ) gibt. rs.next() holt die nächste Zeile und gibt TRUE zurück wenn es erfolgreich war.

In jeder Zeile gibt es - in deinem Beispiel - genau zwei Spalten, nämlich a und b.
Die liest du dann mit der for-Schleife aus, die ganau zweimal durchlaufen wird.

Es gibt ein sehr gutes Buch von Guido Krüger
http://www.javabuch.de/

Es steht als HTML-Ausgabe zum freien Download im Web. Dort gibt es ein Kapitel über Datenbankzugriffe mit JDBC mit guten Beispielen.
Gruss
Mike
 

Murray

Top Contributor
Wie man ein ResultSet iteriert, ist ja klar. Für mich sieht aber so aus, als wollte Kubi direkt bei der Iteration des ResultSets das Ergebnis in eine andere Struktur überführen:

Aus dem Ergebnis
#1: a1,b11
#2: a1,b12
#3: a1,b13
#4: a2,b21
#5: a2,b22
#6: a2,b23
...
#((n-1)*3+1): an,bn1
#((n-1)*3+2): an,bn2
#((n-1)*3+3): an,bn3

soll so eine Liste werden:
{{b11,b12,b13},{b21,b22,b23},...,{bn1,bn2,bn3}}

Es sollen also jeweils die b's aus 3 Zeilen zu einem Ergebnissatz zusammengefasst werden; die a's dienen nur der Sortierung und spielen für die Ergebnisliste keine Rolle.

War das so gemeint?
 

Kawa-Mike

Mitglied
Danke für den Tip Murray,
ich habe wirklich nicht genau verstanden was er wollte.

Evtl. kann man das Problem mit einer Hashtable lösen.
a ist der Key, die Objekte sind ArrayListen.
Man püft, ob der Key schon vohanden ist
( h.containsKey() ),
falls nicht - füge einen neuen Eintrag zu Hashtable hinzu,
falls ja - hole die ArrayList und hänge ein B and die ArrayList an.

Gruss
Mike
 

kubi

Mitglied
hi leute!

danke fuer eure hilfe.

ich hab mein result set mal mit und mal ohne die if anweisung ausgeben lassen (print innerhalb der for schleife).

ohne die if einweisung schluckt er einige meiner daten des resultset. mit if funktioniert es ohne probleme.

danke nochmal!
 

kubi

Mitglied
hi murray!

so wie du das beschreiben hast, hab ich mir das gedacht.

also

a1 b11
a1 b12
a1 b13
a2 b21
a2 b22
a2 b23
: :

ich hab mich mal an den gestrigen beitrag rangemacht.

wenn ich mein table zuvor mit einer spl query sortiere, koennte ich dann auch deine loesung von gestern benutzen, oder ist es doch besser mike's tip mit dem hashtable zu folgen.

danke!
 

Murray

Top Contributor
Wenn ich den ersten Post richtig verstanden habe, dann willst Du mit den drei b's ja noch rechnen (vom größten die kleineren abziehen, oder?). Wenn das so ist, dann brauchst Du ja ohnehin eine Sortierung aller b's für ein a. In diesem Fall würde ich bei der von Dir ja schon angegebenen zweistufigen Sortierung bleiben.
Ansonsten ist der Hashtable-Ansatz vielleicht etwas übersichtlicher.
 

Kawa-Mike

Mitglied
Hi Kubi,
wenn es Dir nur auf die Werte ( Ergebnisse ) ankommt, dann brauchst du keine Hashtable. Es reicht ein normales Double-Array.
Du kannst mit rs.getDouble("b") die Werte direkt als double aus dem Resultset auslesen und dann damit Rechnen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Resultset.last() Problem Datenbankprogrammierung 12
I Problem mit ResultSet Datenbankprogrammierung 2
M Oracle Problem mit Resultset Datenbankprogrammierung 11
M Problem mit ResultSet bei SQL Server 2005 Datenbankprogrammierung 6
T Problem beim Update vom Resultset + Firebird Datenbankprogrammierung 2
R Resultset DELETEROW Problem Datenbankprogrammierung 7
K Mal wieder Problem mit resultSet , kennt nicht getString() Datenbankprogrammierung 2
R Select und Insert in Schleife - Problem mit ResultSet Datenbankprogrammierung 2
G resultset problem Datenbankprogrammierung 2
F ResultSet-Problem Datenbankprogrammierung 12
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
T Problem beim schreiben von daten Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
M Problem mit Hibernate und Access Datenbankprogrammierung 9
C firebird problem Datenbankprogrammierung 5
F Problem mit Datenbankabfrage Datenbankprogrammierung 7
K SQL Problem mit Date Datenbankprogrammierung 3
jeppi MySQL Design-Problem: DB-Verbindung herstellen und halten - JdbcRowSet / Idle-Timeout? Datenbankprogrammierung 9
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G MySQL Connection Problem Datenbankprogrammierung 3
O MySQL Problem mit Umlauten?! Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben