Datenbank Abfrage (Felder&Tabelle nicht fix) in ArrayLis

Status
Nicht offen für weitere Antworten.
L

Louis2

Gast
Hallo,

folgendes Problem. Ich habe eine DB Abfrage bei der die Felder/Tabelle die ausgewählt werden nicht immer fix sind, das ganze wird zur Laufzeit erstellt.
Nun habe ich vor für jedes Feld eine ArrayList anzulegen, aber ich weiss ja nicht wieviele Felder in der DB Abfrage auftauchen werden deshalb benutze ich eine for-Schleife. Mein Problem ist halt, wie schaffe ich es für jedes Feld eine ArrayList anzulegen (Variable name muss verschieden sein...). Der Punkt ist, dass am Ende alles in eine JTable gefüllt wird, eine ArrayList=eine Spalte. Hat jemand eine Idee?

Code:
try
{
    String resultstatement=new String();
    Statement result = main3.connection.createStatement(); 
    resultstatement = temp + " FROM customer_data d, " + 
resultTable + " a, contactnumber c, description de WHERE 
a.customerid=d.customerid AND d.addressid=c.addressid 
AND de.description='E-Mail'";
    ResultSet rs = result.executeQuery(resultstatement); 
    System.out.println(rs);
                  
    for (int j=0;j<selectedfieldslen;j++)  // selectedfieldslen Anzahl der Felder
    { 
        resultf = new ArrayList(); // nun will ich für jedes Feld eine neue ArrayList... Hmmm?
    } 
    while (rs.next()) 
    { 
        for (int j=0;j<selectedfieldslen;j++) 
        { 
            resultf.add(rs.getString(j)); // in ArrayList Nr. 1 kommen die Daten 
//von Feld z.B CustomerID, in Nr.2 CustomerNo usw...
        } 
    }
 

KSG9|sebastian

Top Contributor
Erstmal ein paar Anmerkungen

Code:
  Statement result = main3.connection.createStatement();

Das ist definitiv schlechtes Design deiner Anwendung. Man verwendet keine public-Variablen sondern benutzt getter/setter.
Man gibt aber v.a. keine Connections oder ResultSets an zig andere Klassen weiter. In der Datenbank-Klasse feuert man ne Abfrage auf ne DB ab, das Ergebniss überführt man in eine eigene Struktur (Vector, ArrayList, Array aus eigener Klasse).

Code:
resultstatement = temp + " FROM customer_data d, " + resultTable + " a, contactnumber c, description de WHERE a.customerid=d.customerid AND d.addressid=c.addressid AND de.description='E-Mail'";

Verwende nen StringBuffer, der is WESENTLICH schneller.

Code:
StringBuffer buf = new StringBuffer();
buf.append("abc");
buf.append(variable);
//u.s.w. u.sf

System.out.println(buf.toString());

Das was du da vorhast ist keine gute Idee. Was wird denn zur Laufzeit erstellt ? Die Datenbank/Tabelle oder wie ?

Wenn du das so machen willst, warum dann 1 ArrayList PRO Feld ? Wenn dann 1 ArrayList pro Tabelle, und in der ArrayList stehen die Spaltennamen.

Wobei ich das für kein gutes Design halte.

Gruß Sebastian
 

KSG9|sebastian

Top Contributor
Wenn du es wirklich so machen willst, dann so:

Code:
ArrayList lists = new ArrayList();

for (int j=0;j<selectedfieldslen;j++) {
   lists.add(new ArrayList());
}
int listCounter = 0;
while(rs.next()){
   for (int j=0;j<selectedfieldslen;j++) 
   { 
       ((ArrayList)lists.get(listCounter)).add(rs.getString(j));                    
   } 
   listCounter++;
}
 
L

Louis2

Gast
Also ich habe das ganze so gemacht.
Code:
try
{
    String resultstatement=new String();
    Statement result = main3.connection.createStatement(); 
    resultstatement = temp + " FROM customer_data d, " + 
resultTable + " a, contactnumber c, description de WHERE 
a.customerid=d.customerid AND d.addressid=c.addressid 
AND de.description='E-Mail'";
    ResultSet rs = result.executeQuery(resultstatement); 
    ArrayList lists = new ArrayList(); 
                                    
    for (int j=0;j<selectedfieldslen;j++) 
    { 
        lists.add(new ArrayList());
    } 
                  
    while (rs.next()) 
    { 
        for (int j=0;j<selectedfieldslen;j++) 
        { 
            ((ArrayList)lists.get(j)).add(rs.getString((j+1)));  
        } 
    } 
    int listSize = lists.size();      
    int leng = ((ArrayList)lists.get(0)).size();
    main3.valueLabel.setText("               Number of rows: " + len);
    main3.valueProg.setText("x  of " + len + " Emails");
    main3.bar.setVisible(true);
    main3.bar.setMinimum(0);
    main3.bar.setMaximum(len);
 
    for (int n=0;n<leng;n++) 
    { 
        for (int m=0;m<listSize;m++)
        {
            String listresult = (String) ((ArrayList)lists.get(m)).get(n);
            //main3.model.addRow(new String[] {listresult});
            main3.model.setValueAt(listresult, n, m);
        }
    }
    lists.clear();
}
catch(Exception e3) 
{    
    JOptionPane.showMessageDialog(null, "Data could not be received:" + "\n" + e3.getMessage()); 
    e3.printStackTrace();
}

Beim ausgeben
Code:
main3.model.setValueAt(listresult, n, m);
erscheint eine ArrayIndexOutOfBoundsException: 0 >= 0.
D.h mein n oder m (row/column) existieren nicht, heißt es mein model ist noch nicht kreiiert?
Wenn ich als Ausgabe
Code:
main3.model.addRow(new String[] {listresult});
verwende, packt er alle Ergebnisse in Spalte 0 aber immerhin kommt keine Meldung. Wieso geht es nicht mit .setValueAt ?
Code:
   at java.util.Vector.elementAt(Vector.java:432)
        at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:637)
        at emailclient.FieldsSelection.actionPerformed(FieldsSelection.java:202)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
        at java.awt.Component.processMouseEvent(Component.java:5488)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1774)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
 
B

Beni

Gast
setValueAt funktioniert nur, wenn es bereits eine Spalte und eine Zeile gibt, welche diese Zelle enthält.

Du könntest noch bevor deine innere Schleife zu laufen beginnt mit "addRow" eine neue Zeile einfügen (mit "listSize" leeren Elementen), welche du dann mit "setValueAt" auffüllst.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Java Acces Datenbank Problem ! (Brauche eine Abfrage) Allgemeine Java-Themen 5
G Abfrage in datenbank Allgemeine Java-Themen 5
8u3631984 Bilder in Datenbank speichern - sinnvoll Allgemeine Java-Themen 5
S Kochbuch bzw. Rezepte-Datenbank app mit Swing..? Allgemeine Java-Themen 5
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
B API Token in Datenbank ablegen? Allgemeine Java-Themen 9
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
P Datenbank-MiniGUI fügt keine Daten ein Allgemeine Java-Themen 4
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
Meeresgott Kapselung Tabellen der Datenbank erzeugen. Allgemeine Java-Themen 7
D Daten in MySQL-Datenbank schreiben Allgemeine Java-Themen 13
looparda Unit Test - Abgänigkeit zur Datenbank isolieren Allgemeine Java-Themen 3
T Datentypen MNIST Datenbank auslesen (.gz) Allgemeine Java-Themen 0
O 2 Combobox in Abhängigkeit von der 1 Combobox (Datenbank) Allgemeine Java-Themen 1
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
F OOP Datenbank-Klasse überall verfübar Allgemeine Java-Themen 2
R Test Umgebung für Datenbank erstellen, was braucht es? Allgemeine Java-Themen 14
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
T Zugriff auf Datenbank Allgemeine Java-Themen 1
G Datenbank von nöten? Allgemeine Java-Themen 7
3 Backup von h2-Datenbank-Datei erstellen Allgemeine Java-Themen 6
S Java DateTime für Datenbank Allgemeine Java-Themen 4
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
vandread Daten verschlüsseln mit Java oder Datenbank Allgemeine Java-Themen 15
P MYSQL Datenbank Dump einspielen Allgemeine Java-Themen 1
M SQL Datenbank in JAVA Projekt Allgemeine Java-Themen 3
P iTunes Datenbank manipulieren Allgemeine Java-Themen 2
A Ausführbare Java-Datei aus Projekt und Datenbank Allgemeine Java-Themen 3
T Datenbank oder Filesystem? (E-Learning) Allgemeine Java-Themen 2
N Datei aus Datenbank öffnen mit Standardanwendung Allgemeine Java-Themen 2
J Datenbank und OO-Aufsatz Allgemeine Java-Themen 9
M BufferedReader: Vom Logfile zur Datenbank Allgemeine Java-Themen 6
P Klassen Template-Klasse für Datenbank-Abfragen erstellen Allgemeine Java-Themen 2
E JAVA Alternativen zur Datenbank? Allgemeine Java-Themen 7
Dit_ GeoKoordinaten Datenbank (nicht nur Städte) Allgemeine Java-Themen 6
J Progress Bar während Datenbank Erstellung Allgemeine Java-Themen 2
C Datenbank - Textfiles - Anderes Allgemeine Java-Themen 34
T Datenbank lässt sich un Entwicklungsumgebung öffnen, aus .jar aber nicht Allgemeine Java-Themen 9
G JNDI/LDAP/Datenbank Allgemeine Java-Themen 2
Meldanor Speichern der Datenbank - Lohnen sich mehrere Threads? Allgemeine Java-Themen 2
hdi [Free Download] Film-Datenbank Allgemeine Java-Themen 30
G Excel-Daten in Datenbank speichern - Problem mit leeren Feldern Allgemeine Java-Themen 7
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
C Java Polling, Server Prozedur oder doch Datenbank? Allgemeine Java-Themen 4
H .dbf (IV) Datenbank einlesen Allgemeine Java-Themen 9
D Recipes / Codeschnipsel Datenbank für Java? Allgemeine Java-Themen 3
T MySQl Datenbank als Array ausgeben Allgemeine Java-Themen 11
M Rechenweg in Datenbank speichern und nutzen Allgemeine Java-Themen 6
O viele Datensätze aus Datenbank - Java Heap Space - Excepion Allgemeine Java-Themen 25
E Datenbank/iBatis Fehlermeldung Allgemeine Java-Themen 4
G Datenbank zur laufzeit wechseln Allgemeine Java-Themen 11
N ClassLoader - Laden von Bytecode aus einer Datenbank Allgemeine Java-Themen 6
S Speicherung von Daten: Datenbank(sql) oder xml? Allgemeine Java-Themen 9
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
A Problem beim Starten der H2-Datenbank Allgemeine Java-Themen 4
S Datenbank Abfragen mit großen Datenmengen Allgemeine Java-Themen 22
G Datenbank-Anwendung schnell erstellen. Allgemeine Java-Themen 7
P Datenbank Tabelle spiegeln Allgemeine Java-Themen 22
E MySQL-Datenbank <-> HashMap/TreeMap Allgemeine Java-Themen 1
P Zugriff auf die DatenBank Allgemeine Java-Themen 44
H Daten aus MySQL datenbank auslesen und in ArrayList stecken Allgemeine Java-Themen 8
P Timestamp in eine Firebird-Datenbank einfügen Allgemeine Java-Themen 6
B Datenbank anlegen Allgemeine Java-Themen 10
N Datenbank vs. Filesystem Allgemeine Java-Themen 5
F datenbank oder csv etc Allgemeine Java-Themen 6
V Brauche Beratung in Sachen Java+Datenbank+Web Allgemeine Java-Themen 8
G Ab wann Datenbank verwenden Allgemeine Java-Themen 15
H sichere Datenbank-Verbindung Allgemeine Java-Themen 4
H Datenbank an ein Java Client Server Programm anschliessen Allgemeine Java-Themen 3
F lizenzfreie Datenbank für JAVA-Anwendung Allgemeine Java-Themen 3
S Zeilenausgabe Datenbank Allgemeine Java-Themen 2
S Datenbank Allgemeine Java-Themen 9
G Sichere Passwortübergabe bei Datenbank Allgemeine Java-Themen 14
S Java Datenbank auf Festplatte installieren Allgemeine Java-Themen 2
G JComboBox mit Werten aus einer Access Datenbank füllen Allgemeine Java-Themen 18
T Java Application Server + Datenbank von CD Allgemeine Java-Themen 8
G Daten aus MySQL-Datenbank an JFreeChart übergeben Allgemeine Java-Themen 3
D Userdaten + Datenbank? Allgemeine Java-Themen 11
G HSQLDB Datenbank-Dateien aus Jar-Datei lesen Allgemeine Java-Themen 5
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
tom.j85 Exception bei Abfrage von Ländercodes in API? Allgemeine Java-Themen 13
T Fehler bei IF abfrage Allgemeine Java-Themen 8
D Mehrdimensionale Abfrage Allgemeine Java-Themen 15
MiMa If-Abfrage mit Parameter Allgemeine Java-Themen 8
kodela Binäre Abfrage Allgemeine Java-Themen 12
D MAC Adressen Abfrage Allgemeine Java-Themen 5
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
B Java Abfrage Netzbetrieb oder Akkubetrieb Allgemeine Java-Themen 1
T Login-Abfrage Allgemeine Java-Themen 3
T Login mit LDAP-Abfrage Allgemeine Java-Themen 3
M Event Handling Tastatur abfrage Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben