Daten aus DB in variable Zahl an Variablen speichern

Status
Nicht offen für weitere Antworten.

Taramsis

Bekanntes Mitglied
Hi,

ich versuch mich gerade dran Daten zum bearbeiten aus einer DB zu lesen. Ich habe eine DB "Modules" und dieser enthählt je nach dem wieviele Module man erstellt hat, die selbige Anzahl an Tabellen.
Nun möchte ich die Daten aus dieser variablen Zahl an Tabellen in einem Resultset speichern, um entsprechende Werte zu berechnen (z.B. zeitliche Länge durch Start- und Endzeiten). Ich muß erwänen, dass die Tabellen unterschiedlich heißen, aber die Namen der Values sin immer gleich.
Mein Frage lautet wie kann ich die Daten in einer variablen Zahl an Variblen Speichern, um diese für entsprechende Berechnungen zu benutzen?

Mein Ansatz:

Java:
public void getDuration() {
        Date date;
        try {
            Class.forName(driver);
            con = (Connection) DriverManager.getConnection(url + db  , user, pass);
            stmt = (Statement) con.createStatement();

            res = (ResultSet) stmt.executeQuery( "SELECT TaskCommonDim, " +
                                                 "TaskStart, " +
                                                 "TaskEnd, " + 
                                                 "Piority, " + 
                                                 "TimeFrame " +
                                                 "FROM " + managerAlg.getStringData() + " " );

            res.next();
            
            managerAlg.setCommonDim(res.getString("TaskCommonDim"));
            managerAlg.setTaskStart(res.getString("TaskStart"));
            managerAlg.setTaskEnd(res.getString("TaskEnd"));
            managerAlg.setPiority(res.getString("Piority"));
            managerAlg.setTimeFrame(res.getString("TimeFrame"));
            
            date = (Date) managerAlg.getFormat().parse(managerAlg.getTaskStart());
            date.setTime(date.getTime());
            System.out.println(date);            
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }

funzt natürlich nicht!
" managerAlg.getStringData() " gibt die Namen der Module wieder und dies durch ein Komma getrennt!
In einer Manager-Klasse habe ich die get und set Methoden definiert!
 
G

Gelöschtes Mitglied 5909

Gast
verwende eine liste und füge da objekte deines Datencontainers hinzu
 

Taramsis

Bekanntes Mitglied
Wiekann ich den z.B für einen Modul alle längen(Endzeit-Startzeit) berechnen?

Java:
public void getDuration() {
        Date date;
        Date date2;
        try {
            Class.forName(driver);
            con = (Connection) DriverManager.getConnection(url + db  , user, pass);
            stmt = (Statement) con.createStatement();

            res = (ResultSet) stmt.executeQuery( "SELECT TaskCommonDim, " +
                                                 "TaskStart, " +
                                                 "TaskEnd, " + 
                                                 "Piority, " + 
                                                 "TimeFrame " +
                                                 "FROM m1 " );

            res.next();
            
            managerAlg.setCommonDim(res.getString("TaskCommonDim"));
            managerAlg.setTaskStart(res.getString("TaskStart"));
            managerAlg.setTaskEnd(res.getString("TaskEnd"));
            managerAlg.setPiority(res.getString("Piority"));
            managerAlg.setTimeFrame(res.getString("TimeFrame"));
            
            date = (Date) managerAlg.getFormat().parse(managerAlg.getTaskStart());
            date2 = (Date) managerAlg.getFormat().parse(managerAlg.getTaskEnd());
            x = date.getTime()/60000;
            y = date2.getTime()/60000;
            z = y - x;
            date.setTime(date.getTime());
            
            
            con.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        System.out.println(z + " min");
    }
Ich habe doch durch die SELECT Anweisung alle Daten aus der DB geholt? Bin wirklich nicht besonders fit in Sachen DB;(
 
S

SlaterB

Gast
fange ganz einfach an, am besten ohne DB sondern mit einer Textdatei oder mit einer String-Liste / Array direkt im Programm, das ist meist ähnlich,

lies die Datei ein und gib sie Zeile für Zeile aus,
danach zu jeder Zeile Berechnungen, z.B. die Zeilenlänge

Grundfunktionen wie Arrays und Schleifen kennenleren
 

Taramsis

Bekanntes Mitglied
Ich würde gern so etwas haben:
Java:
public Object[][] getDuration() {
        Object[][] list = null;    
        int listSize = 0;
        Date date;
        Date date2;
        try {
            Class.forName(driver);
            con = (Connection) DriverManager.getConnection(url + db  , user, pass);
            stmt = (Statement) con.createStatement();

            res = (ResultSet) stmt.executeQuery( "SELECT TaskCommonDim, " +
                                                 "TaskStart, " +
                                                 "TaskEnd, " + 
                                                 "Piority, " + 
                                                 "TimeFrame " +
                                                 "FROM m1 " );

           
            
            managerAlg.setCommonDim(res.getString("TaskCommonDim"));
            managerAlg.setTaskStart(res.getString("TaskStart"));
            managerAlg.setTaskEnd(res.getString("TaskEnd"));
            managerAlg.setPiority(res.getString("Piority"));
            managerAlg.setTimeFrame(res.getString("TimeFrame"));
            
//            date = (Date) managerAlg.getFormat().parse(managerAlg.getTaskStart());
//            date2 = (Date) managerAlg.getFormat().parse(managerAlg.getTaskEnd());
//            x = date.getTime()/60000;
//            y = date2.getTime()/60000;
//            z = y - x;
//            date.setTime(date.getTime());
            
            while (res.next()) {
                listSize++;
            }
            res.first();
            
            if (listSize > 0) {
                list = new Object[listSize][4];
                for (int i = 0; i < listSize; i++) {
                    list[i][0] = res.getString("TaskCommonDim");
                    list[i][1] =  res.getTime("TaskEnd")/60000 - res.getTime("TaskStart")/60000; // Zeile ist Bullshitt, aber wie könnte ich so etwas direkt berechnen
                    list[i][2] = res.getString("Piority");
                    list[i][3] = res.getString("TimeFrame");
                    

                    res.next();
                }
            }
            
            con.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        System.out.println(z + " min");
        return list;
    }
 

Taramsis

Bekanntes Mitglied
Habs fast geschafft bekomme in der for-Schleife immer das gleiche Objekt!
Java:
public Object[][] calDuration() {
        Object[][] list = null;  
        Object[] z = null;
        int listSize = 0;
        Date date;
        Date date2;
        try {
            Class.forName(driver);
            con = (Connection) DriverManager.getConnection(url + db  , user, pass);
            stmt = (Statement) con.createStatement();

            res = (ResultSet) stmt.executeQuery( "SELECT TaskCommonDim, " +
                                                 "TaskStart, " +
                                                 "TaskEnd, " + 
                                                 "Piority, " + 
                                                 "TimeFrame " +
                                                 "FROM m1 " );

           
            
//            managerAlg.setCommonDim(res.getString("TaskCommonDim"));
//            managerAlg.setTaskStart(res.getString("TaskStart"));
//            managerAlg.setTaskEnd(res.getString("TaskEnd"));
//            managerAlg.setPiority(res.getString("Piority"));
//            managerAlg.setTimeFrame(res.getString("TimeFrame"));
            
            

            
            
            
            while (res.next()) {
                listSize++;
            }
            res.first();
            
            date = (Date) res.getTime("TaskStart");
            date2 = (Date) res.getTime("TaskEnd");
            
            z = new Object [20];
            for (int i = 0; i < z.length; i++ ) {
                z[i] = date2.getTime()/60000 - date.getTime()/60000;
                
            }
            
            if (listSize > 0) {
                list = new Object[listSize][4];
                for (int i = 0; i < listSize; i++) {
                    list[i][0] = res.getString("TaskCommonDim");
                    list[i][1] = z;
                    list[i][2] = res.getString("Piority");
                    list[i][3] = res.getString("TimeFrame");
                    

                    res.next();
                }
            }
            
            con.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        System.out.println(list);
        return list;
    }

hat jemand ne Idee?
 
S

SlaterB

Gast
welche for-Schleife, welches Objekt (dates und z oder list), wie stellst du fest, dass es das gleiche ist,
und wie soll es sich unterscheiden?
 

Taramsis

Bekanntes Mitglied
Ich will, dass er mir hier die berechneten längen aller Eintragungen der DB wiedergibt - er berechnet dies, aber immer nur fürs erste!
Java:
for (int i = 0; i < z.length; i++ ) {
                z[i] = date2.getTime()/60000 - date.getTime()/60000;
                
            }

habe mir sonst folgendes überlegt, damit immer der nächste Eintrag geholt wird
Java:
 for (int i = 0; i < z.length; i++ ) {
                date = (Date) res.getTime("TaskStart");
                date2 = (Date) res.getTime("TaskEnd");
                z[i] = date2.getTime()/60000 - date.getTime()/60000;
                res.next();
            }
bekomme aber eine "java.sql.SQLException: After end of result set" in der liste drunter und zwar hier:
Java:
if (listSize > 0) {
                list = new Object[listSize][4];
                for (int i = 0; i < listSize; i++) {
                    list[i][0] = res.getString("TaskCommonDim"); //<- hier
                    list[i][1] = z;
                    list[i][2] = res.getString("Piority");
                    list[i][3] = res.getString("TimeFrame");
                    

                    res.next();
                }
            }
 
S

SlaterB

Gast
das klingt ja ganz anders als zuvor,

je nach DB/ Einstellungen kann man ein ResultSet nicht mit
while (res.next()) { listSize++; }
durchlaufen und dann wieder auf first() setzen,

durchlaufe das Set nur einmal, speichere die Ergebnisse in einer Liste, welche dynamisch wachsen kann
 

Taramsis

Bekanntes Mitglied
Java:
z = new Object [listSize];
            for (int i = 0; i < listSize; i++ ) {
                date = (Date) res.getTime("TaskStart");
                date2 = (Date) res.getTime("TaskEnd");
                z[i] = date2.getTime()/60000 - date.getTime()/60000;
                res.next();
            }
            
            if (listSize > 0) {
                list = new Object[listSize][4];
                for (int i = 0; i < listSize; i++) {
                    list[i][0] = res.getString("TaskCommonDim");
                    list[i][1] = z;
                    list[i][2] = res.getString("Piority");
                    list[i][3] = res.getString("TimeFrame");
                    

                    res.next();
                }
            }
Beziehst du dich auf die erste Schleife? Ich muß doch solange mein Set durchlaufen, bis ich alle Werte berechnet habe! Oder beziest du dich auf einen anderen part?
 
S

SlaterB

Gast
es ist so wie ich es gesagt habe:
while (res.next()) { listSize++; }
läuft bei dir anscheinend einmal erfolgreich durch,
danach versuchst du es aber ein zweites Mal (ich werde jetzt nicht genau die Schleife benennen, in der auch res.next(); drin steht)
und das ist verboten sofern nicht erlaubt,

man könnte nun darüber nachdenken, dies zu erlauben, dazu kann ich nix sagen,
allgemein reicht es aber fast immer, ein ResultSet nur einmal zu durchlaufen, du musst vorher nicht die Anzahl der Ergebnisse zählen
 

Taramsis

Bekanntes Mitglied
in der while schleife rechne ich ja nur die listsize aus die ich später verwende!
Mein Problem ist zur Zeit:
- wie übergebe ich "z" an "list"

auktualisierter Code:

Java:
 public Object[][] calDuration() {
        Object[][] list = null;  
        Vector v = null ;
        Object[] z = null;
        int listSize = 0;
        Date date;
        Date date2;
        try {
            Class.forName(driver);
            con = (Connection) DriverManager.getConnection(url + db  , user, pass);
            stmt = (Statement) con.createStatement();

            res = (ResultSet) stmt.executeQuery( "SELECT TaskCommonDim, " +
                                                 "TaskStart, " +
                                                 "TaskEnd, " +
                                                 "Piority, " + 
                                                 "TimeFrame " +
                                                 "FROM m1 " +
                                                 "ORDER BY TaskStart ");
            while (res.next()) {
                listSize++;
            }
            res.first();

            z = new Object[listSize];
            for (int i = 0; i < listSize; i++ ) {
                date = res.getTime("TaskStart");
                date2 = res.getTime("TaskEnd");
                z[i] = (date2.getTime() - date.getTime())/6000;
                res.next();
            }
            System.out.println(z);
            date = res.getTime("TaskStart");
            
            res.first();
            
            if (listSize > 0) {
                list = new Object[listSize][4];
                for (int i = 0; i < listSize; i++) {
                    list[i][0] = res.getString("TaskCommonDim");
                    list[i][1] = z;
                    list[i][2] = res.getString("Piority");
                    list[i][3] = res.getString("TimeFrame");

                    res.next();
                }
            }
            con.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        System.out.println(list);
        return list;
    }
In meiner JTable wir immer nur das erste Objekt aus "z" angezeigt!
 
S

SlaterB

Gast
gib bitte
Arrays.toString(z);
in der Konsole aus, welche Ausgabe?

was deine JTable dran draus macht, ist eine andere Frage
 

Taramsis

Bekanntes Mitglied
er gibt mir ein Array mit allen längen wieder!
Ich habe es auch in der zweiten Schleife eingesetzt und dort erscheint das Array mit den Längen in jeder Zeile:
Java:
list[i][1] = Arrays.toString(z);
 
S

SlaterB

Gast
denkbar wäre nun, dass du an list[1] nur das i-te Element von z haben möchtest, statt ganz z, ob als String oder als Array,

mehr kann ich aber derzeit nicht im Voraus erahnen
 

Taramsis

Bekanntes Mitglied
Sorry, hätte ich erwähnen sollen!
Genau das möchte ich haben! Die Frage ist nur wie spreche ich in
Java:
z = new Object[listSize];
            for (int i = 0; i < listSize; i++ ) {
                date = res.getTime("TaskStart");
                date2 = res.getTime("TaskEnd");
                z[i] = (date2.getTime() - date.getTime())/60000;
                res.next();
            }
            System.out.println(z);
            date = res.getTime("TaskStart");
            
            res.first();
            
            if (listSize > 0) {
                list = new Object[listSize][4];
                for (int i = 0; i < listSize; i++) {
                    list[i][0] = res.getString("TaskCommonDim");
                    list[i][1] = Arrays.toString(z);
                    list[i][2] = res.getString("Piority");
                    list[i][3] = res.getString("TimeFrame");

                    res.next();
                }
            }

der zweiten Schleife das i-te Element von z an?
 
S

SlaterB

Gast
list[1] = z;

bzw. verzichte ganz auf z und führe die Berechnung

date = res.getTime("TaskStart");
date2 = res.getTime("TaskEnd");
z = (date2.getTime() - date.getTime())/60000;

dann direkt in der list-Schleife durch:


date = res.getTime("TaskStart");
date2 = res.getTime("TaskEnd");
list[1] = (date2.getTime() - date.getTime())/60000;
 

Taramsis

Bekanntes Mitglied
Manchmal habe ich einen Brett vor dem Kopf! ich dachte "list[1] = z;" hätte ich ausprobiert !
Danke!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Alte Daten ins neue Modell quetschen Datenbankprogrammierung 6
R Mongodb Daten werden immer überschrieben Datenbankprogrammierung 7
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
B Daten HSQL-DB Datenbankprogrammierung 2
V H2 ManyToMany wie speichere ich die Daten? Datenbankprogrammierung 10
thobren Projekt SQlite! Wie kann ich auf auf SQlite Daten zugreifen? Datenbankprogrammierung 4
OnDemand Daten verschlüsseln Datenbankprogrammierung 42
L Oracle Daten in Häppchen selektieren Datenbankprogrammierung 5
L Oracle Daten von Oracle zu MSSQL übertragen Datenbankprogrammierung 4
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Z Ausgabe nur bestimmter Daten Datenbankprogrammierung 6
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
Kirby.exe Vorschläge zur Verschlüsselung von Daten in der DB Datenbankprogrammierung 2
T Java Spiel Daten speichern Datenbankprogrammierung 1
LimDul H2 Embedded DB und Gigabytes an Daten Datenbankprogrammierung 0
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
R Wie mit zu viele Daten umgehen? Datenbankprogrammierung 2
F MySQL Wie speichere ich Daten zeitlich abhängig? Datenbankprogrammierung 4
T Oracle Normalisierung und Daten splitten Datenbankprogrammierung 1
JG12111989 DB-Daten werden falsch dargestellt Datenbankprogrammierung 7
K H2 Daten in die H2 console DB eintragen Datenbankprogrammierung 2
L SQLite Ändern der Daten in einem UNIQUE Feld Datenbankprogrammierung 1
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
L Oracle Daten von einem Server zum andere kopieren Datenbankprogrammierung 24
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
L MySQL Vergleichen von Array-Inhalt, Ausgabe gleicher Daten Datenbankprogrammierung 3
W Daten in Java intern abfragen Datenbankprogrammierung 1
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
I MySQL Datenbankstruktur angleichen - Daten behalten Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
P LDAP: Daten eintragen funktioniert nicht Datenbankprogrammierung 7
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
O mit Multi-Thread Daten aus Datenbank lesen und schreiben Datenbankprogrammierung 22
F Daten verdichten Datenbankprogrammierung 0
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
B Daten aus DB in Word Dokument Datenbankprogrammierung 2
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
D Daten posten auf RestApi (Mongodb/NoSQL) Datenbankprogrammierung 0
I Fehler bei Ausgabe der Daten aus der DB Datenbankprogrammierung 3
OnDemand MySQL Daten aktualisieren Datenbankprogrammierung 6
D Daten von einem Server in eigenem Java-Programm benutzen Datenbankprogrammierung 6
M Vergleich von Daten in verschiedenen Tabellen Datenbankprogrammierung 1
S Daten aus Form in Datenbank nur einmal eintragen Datenbankprogrammierung 2
6 JBDC Daten verschlüsseln? Datenbankprogrammierung 2
F MySQL Daten ändern über Java Datenbankprogrammierung 3
G SQLite Daten aus SQLite DB in andere SQLite DB importieren Datenbankprogrammierung 4
H Grosse Menge an Daten in eine Datenbank Datenbankprogrammierung 32
M Daten nachträglich hinzufügen Datenbankprogrammierung 6
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
E Daten einer SQL-Datenbank aus Combobox in labels schreiben Datenbankprogrammierung 6
N HSQLDB Daten Auslesen Datenbankprogrammierung 3
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
P MySql daten in leeren jtable übertragen Datenbankprogrammierung 5
SexyPenny90 SQL Daten sortieren und top 5 ausgeben Datenbankprogrammierung 7
L Hibernat will Daten nicht einfügen??? Datenbankprogrammierung 2
B MySQL DB Daten aktualisieren Datenbankprogrammierung 9
D MySQL Daten werden aus Datenbank gelesen, obwohl sie dort gar nicht angekommen sind Datenbankprogrammierung 8
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
L SQLite Daten werden nicht in die Tabelle eingefügt Datenbankprogrammierung 7
D Übersichtliche Zuweisung von Daten in Tabellen Datenbankprogrammierung 17
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
J Daten synchronisieren in Multi-Client-Anwendungen (Hibernate) Datenbankprogrammierung 6
S JPA: DB Schema ändern und Daten nicht verlieren - wie? Datenbankprogrammierung 5
T MySQL Select: Zusammenfassen von Daten und bilden von Durchschnitt? Datenbankprogrammierung 4
F Daten in die DB hinzufügen Datenbankprogrammierung 7
H Klasse welche Mysql Daten zurück gibt Datenbankprogrammierung 18
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
H Daten in/aus Datenbank schreiben Datenbankprogrammierung 2
M DropDownBoxen mit MySQL Daten füllen Datenbankprogrammierung 3
E MySQL Daten in die Datenbank eingeben via Java Programm Datenbankprogrammierung 3
F ORA 17410 Keine weiteren Daten aus Socket zu lesen Datenbankprogrammierung 2
B Daten aus Datenbank holen Datenbankprogrammierung 6
T Problem beim schreiben von daten Datenbankprogrammierung 4
N Daten aus Datenbank abfragen und anzeigen in der Praxis?? Datenbankprogrammierung 2
G MySQL Bekomme keine Daten. Datenbankprogrammierung 7
L CLOB-Daten werden beim Einfügen in die Datenbank geändert? Datenbankprogrammierung 5
G Daten aggregieren Datenbankprogrammierung 11
Gossi Oracle 2 Daten (Datum) vergleichen Datenbankprogrammierung 6
W MySQL Daten aus bestimmter Spalte lesen Datenbankprogrammierung 2
E MySQL Befüllen einer MySQL DB mit großen Daten Datenbankprogrammierung 6
J Doppelte Daten in Spalte, nur die erste abrufen wie? Datenbankprogrammierung 15
P Daten aus MySql Datenbank lesen??? Datenbankprogrammierung 6
J Daten vergleichen Datenbankprogrammierung 10
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
T Designfrage: DB-Daten direkt oder verzögert speichern Datenbankprogrammierung 2
Dragonfire Daten aus jsp Datei in datenbank speichern Datenbankprogrammierung 15
A Daten von Webshop einlesen Datenbankprogrammierung 5
S Daten aus jTextfiled in DB schreiben - SQL Befehl Datenbankprogrammierung 2
A Datenbankanbindung an mySQL und Ein-/Auslesen der Daten Datenbankprogrammierung 4
D Vector mit Daten aus der Datenbank füllen Datenbankprogrammierung 7
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
S Fehler beim Auslesen von Daten Datenbankprogrammierung 6
D Keine Ausgabe der Daten Datenbankprogrammierung 3
G Daten schneller aus einer DB auslesen Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben