# SQL-Tabelle nur bis 259 Einträge - oder zuwenig Speicher?



## Dominicana (10. Feb 2006)

Hi Leute


Habe ein Problem mit einer Tabelle, was bisher kein Problem war.
Und zwarfolgendes :

Mit dieser Klasse habe ich bisher die Datenbank nach der letzten Eintragung gefragt:


```
class DataBaseAccessLast {
    int letzte;
    DataBaseAccessLast() {
        String data = "jdbc:odbc:DVD-Database";
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection conn = DriverManager.getConnection(data);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM DVDTitel");
            while (rs.next()) {
                this.letzte = rs.getInt("DVDNr");
            }
            stmt.close();
            conn.close();
        } catch (SQLException s) {
            JOptionPane.showMessageDialog(null, "SQLException"+s, "Fehler", JOptionPane.ERROR_MESSAGE);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Exception"+e, "Fehler", JOptionPane.ERROR_MESSAGE);
        }
    }
    public int getLast() {
        return letzte;
    }
}
```

Ist es möglich, das der Speicher(1GB) nicht ausreicht, um mehr als 260 Daten einzulesen, obwohl die Tabelle nur
602kb groß ist???
Bzw., wieso funktioniert "rs.last" nicht???


----------



## bronks (10. Feb 2006)

Dominicana hat gesagt.:
			
		

> ... Bzw., wieso funktioniert "rs.last" nicht???


Du verwendest kein rs.last()!?! Dein Programm loopt über einen unsortieren RS und gibt die DVDNr des letzten enthaltenen Satzes zurück, in dem je nach ... ... alles möglich zufällige stehen kann. Da würde ein rs.last() auch nicht helfen. Mindestens sortieren müßtest Du in deinem Sql.

Die höchste DVDNr bekommt Du von diesem SQL 100%ig und um einiges schneller geliefert:

```
select max(dvdnr) as das_letzte from DVDTitel;
```

Die Anzahl der Sätze in einem RS erhälst Du durch 


```
rs.last();
int anzahl = rs.getRow();
```

Viel Erfolg!


----------



## Dominicana (10. Feb 2006)

Hi bronks,

Warum sortieren???

Die DVDNr ist ein int, welcher fortlaufend inkrementiert wird.
Habe das Problem jetzt aber mittels "COUNT(*)" gelöst, was aber nicht dauerhaft sein kann, denn wenn ich
irgendwann, nachdem alle Daten eingetragen sind, darauf zugreifen will, kann es ja nicht sein, daß ich nur maximal
260 Datensätze bekommen kann.

Am Arbeitsspeicher kann es nicht liegen, denn ich habe - incl. Auslagerungsdatei - noch 1.5 GB frei. Kann es aber
sein, daß das ResultSet nur eine bestimmte Größe haben darf???


----------



## bronks (10. Feb 2006)

Dominicana hat gesagt.:
			
		

> ... Warum sortieren??? Die DVDNr ist ein int, welcher fortlaufend inkrementiert wird ...


Es ist absolut undefiniert, in welcher Reihenfolge eine Datenbank die Datensätze her gibt. Du hast das Glück gehabt, daß Deine Entwicklung überhaupt funktioniert hat, obwohl technisch nicht ganz optimal.  Wenn Du in Zeile 9 diesen Sql eintragen würdest "SELECT * FROM DVDTitel order by DVDNr asc;", dann würde das Programm wenigstens schon mal die von Dir erwarteten Ergebnisse liefern, aber von der Umsetzung her ist das leider fürs Gruselkabinett ... 



			
				Dominicana hat gesagt.:
			
		

> Habe das Problem jetzt aber mittels "COUNT(*)" gelöst, was aber nicht dauerhaft sein kann, denn wenn ich irgendwann, nachdem alle Daten eingetragen sind, darauf zugreifen will, kann es ja nicht sein, daß ich nur maximal 260 Datensätze bekommen kann ...


Count() ist keine dauerhafte Lösung, denn solltest Du auf die Idee kommen eine total langweilige DVD zu entsorgen und aus der Datenbank zu löschen, dann hast Du ein Problem. Mach es lieber mit Max() ...

Du bekommst in die Tabelle definitiv so viele DVDs rein, daß Du zum ansehen der DVDs mehrere Leben bräuchtest. Was für eine Datenbankmaschine ist das eigentlich? Dein Problem liegt eigentlich nur darin, daß Du mit falschen Techniken an die Sache rangehst.


----------

