# Datensätze in der Datenbank zählen



## kaper28 (22. Feb 2009)

Hallo Freunde, 

Ich habe eine Datenbank und ich möchte in einer Leiste die Nummer des Aktuellen Datensatzes und die anzahl aller Datensätze anzeigen . Wie kann ich das machen ? Brauche einen guten Rat von euch .


----------



## Kapitän (22. Feb 2009)

Ist Swing ein Begriff für dich?

Wenn nicht, würde ich mich da reinlesen.


----------



## Zed (22. Feb 2009)

Zum ermittelen aller Datensätze:
SELECT COUNT(Spaltenname) AS Summe FROM Tabellenname.

Wie definierst du akteller Datensatz? 
Der/Die Datensatz/sätze sind aktuell, die du herrauslesen tust.


----------



## kaper28 (22. Feb 2009)

sqlAbfrage1=" SELECT COUNT(1) AS Summe FROM adressen";

meints du so was , die spalte eins ist bei mir die ID-Nummer von den Datensätzen


----------



## Zed (22. Feb 2009)

kaper28 hat gesagt.:


> sqlAbfrage1=" SELECT COUNT(1) AS Summe FROM adressen";
> 
> meints du so was , die spalte eins ist bei mir die ID-Nummer von den Datensätzen




sqlAbfrage1=" SELECT COUNT(ID <- Der Name der Tabelle) AS Summe FROM adressen


----------



## kaper28 (22. Feb 2009)

Zed hat gesagt.:


> sqlAbfrage1=" SELECT COUNT(ID <- Der Name der Tabelle) AS Summe FROM adressen



ok das habe ich verstanden , aber warum gibt sqlAbfrage1 den Wert null aus? weil es ein String ist ? Dann muß ich es nochmal zum int konventieren ?


----------



## kaper28 (22. Feb 2009)

sqlAbfrage1=" SELECT COUNT(ID) AS Summe FROM adressen ";
		int intZahl = Integer.parseInt(sqlAbfrage1);

so kann ich es zum int konventieren .. ich versuch mal gleich  ::::


----------



## kaper28 (22. Feb 2009)

nööö klapt leider nicht, ich kann die int variable intZahl nicht ausgeben . hmmmmmmm ?


----------



## Zed (22. Feb 2009)

```
public int countDatensaetze() throws SQLException{
	    	Connection theConnection = null;
	    	PreparedStatement theStatement = null;
	    	ResultSet theResult = null;
	    	
	    	try{
	    		theConnection = null/* Connection zu DB hier eintragen*/;
	    		theStatement = theConnection.prepareStatement("SELECT COUNT(id) AS summe From adressen");
	    		theResult = theStatement.executeQuery();
	    		while(theResult.next()){
	    			return theResult.getInt("summe");
	    		}
	    		
	    	}catch(Exception e){
	    		e.printStackTrace();
	    	} finally{
	    		theResult.close();
	    		theStatement.close();
	    		theConnection.close();  /* DB Verbindung wird hier geschlossen */
	    	}
	    	return 0;
	    }
```

Habs nicht getestet aber sollte gehen.


----------



## Gast2 (22. Feb 2009)

Moin,

nur zwei Hinweise

[HIGHLIGHT="SQL"]SELECT COUNT(id) AS summe From adressen[/HIGHLIGHT]
entweder _COUNT(id) AS anzahl_ oder _SUM(id) AS summe_ - gut ist eher was für klein karrierte Menschen wie mich

aber dennoch würde ich _COUNT(***)_ bevorzugen ... da der OP evt. die passende Spalte anders genannt hat ... es gibt Leute die fragen bei solchen Details noch mal nach - wenn etwas nicht geklappt hat -_-

hand, mogel


----------



## kaper28 (22. Feb 2009)

Zed hat gesagt.:


> ```
> public int countDatensaetze() throws SQLException{
> Connection theConnection = null;
> PreparedStatement theStatement = null;
> ...



so weit ich verstanden habe , muß ich noch eine spalte summe in die Datenbank einführen....Diese splate zählt dann die summe der eingetragenen splaten.


----------



## Zed (22. Feb 2009)

Negativ summe ist nur eine interne SQL Variable und sollte evtl. wie mogel vorgeschlagen hat anzahl heißen

EDIT:
SQL ist eine Programmiersprache und ich denke du hast gerade mal an der Oberfläche gekratzt, mit SQL kann man so einige schöne Sachen machen.


----------



## Gast2 (22. Feb 2009)

Zed hat gesagt.:


> Negativ summe ist nur eine interne SQL Variable und sollte evtl. wie mogel vorgeschlagen hat anzahl heißen


Beruf verfehlt - ich sollte Hellseher werden



> SQL ist eine Programmiersprache und ich denke du hast gerade mal an der Oberfläche gekratzt, mit SQL kann man so einige schöne Sachen machen.


ja - allerdings eine etwas andere ... ich komme immer schön ins schlingern mit den Abfragen ... _"nimm mal das aus der Tabelle und das aus dieser Tabelle und mische das mal ein bischen"_ ... wobei ich SQL nicht so oft einsetze

hand, mogel


----------



## kaper28 (22. Feb 2009)

Zed hat gesagt.:


> Negativ summe ist nur eine interne SQL Variable und sollte evtl. wie mogel vorgeschlagen hat anzahl heißen
> 
> EDIT:
> SQL ist eine Programmiersprache und ich denke du hast gerade mal an der Oberfläche gekratzt, mit SQL kann man so einige schöne Sachen machen.





diese variable muß ich in der Leiste zeigen lassen so weit ich verstanden habe.


----------



## kaper28 (22. Feb 2009)

Lieber Zed,

Die Leiste muß so ausehen :

Datensatz 1 von 5 

die 1 ist die aktuelle Datensatz , 5 die Summe aller datensätze


----------



## Zed (22. Feb 2009)

Die Funktion gibt dir doch die Anzahl der Datensätze zurück. Das Ergebniss weißst du einer Variable zu und fügst diese dann in das Textfeld.

Update:
Aus der Db kannst du nur Datensätze herraushollen nehmen wir mal an du hollst alle und speicherst diese in einem Array. Die größe dieses Arrays ist deine ges. Anzahl der Datensätze. Wie du die Darstellung in der Leiste realisierst hat nix mit SQL zutun sodern muss im Programm stattfinden.


----------



## kaper28 (22. Feb 2009)

das Ergebniss auf eine Varibale und auf den Textfeld.. ok  superr ich versuche es sofort


----------



## kaper28 (22. Feb 2009)

ich hasse das wenn es nicht klappt, ich kann es einfach nicht


----------



## Zed (22. Feb 2009)

Wenn du mal schreiben würdest was du bist jetzt hast, was dein Ansatz ist oder mal Quellcode posten würdest wo es klemmt. Könnte man dir evtl. helfen.


----------



## kaper28 (23. Feb 2009)

public int countDatensaetze() throws SQLException{
    	Connection theConnection = null;
    	PreparedStatement theStatement = null;
    	ResultSet theResult = null;

    	try{
    		theConnection = null/* Connection zu DB hier eintragen*/;
    		theStatement = theConnection.prepareStatement("SELECT COUNT(id) AS summe From adressen");
    		theResult = theStatement.executeQuery();
    		while(theResult.next()){
    			return theResult.getInt("Summe");

    		}

    	}catch(Exception e){
    		e.printStackTrace();
    	} finally{
    		theResult.close();
    		theStatement.close();
    		theConnection.close();  /* DB Verbindung wird hier geschlossen */
    	}
    	return 0;
    }
----------------------
Was ist denn "summe" hier ?


----------



## kaper28 (23. Feb 2009)

kaper28 hat gesagt.:


> public int countDatensaetze() throws SQLException{
> Connection theConnection = null;
> PreparedStatement theStatement = null;
> ResultSet theResult = null;
> ...



Dieser Code liefert mir die anzahl der Datensätze aus, aber wie kann ich es auf einem Variable zufügen ?


----------



## Zed (23. Feb 2009)

Ich hab so eine Vermutung, du keinen Ahnung vom Programmieren. Ich würde dir erstmal empfehlen die Gundlagen zu lernen. 

Die Funktion hat einen Rückgabetyp der ist int.

Füge das mal in deine Main ein. 

```
try{
int theCount =  countDatensaetze();
System.out.println("Anzahl: " + theCount);
catch(SQLException e){
e.printStackTrace();
}
```


----------



## kaper28 (23. Feb 2009)

Zed hat gesagt.:


> Ich hab so eine Vermutung, du keinen Ahnung vom Programmieren. Ich würde dir erstmal empfehlen die Gundlagen zu lernen.
> 
> Die Funktion hat einen Rückgabetyp der ist int.
> 
> ...



du hast recht, aber bald ist es vorbei ..noch ein monat in der schule dann ist es vorbei


----------



## kaper28 (23. Feb 2009)

Zed, ich habe es so gemacht 

public void count(){


	  	  try{
	  		  int theCount =  countDatensaetze();
	  		 System.out.println("Anzahl: " + theCount);
	  	  }catch(SQLException e){
	  		  e.printStackTrace();
	  		  }

	}


----------



## Zed (23. Feb 2009)

Nimm dir mal 20 min und schreib mal was du vor hast. Wenn du in der Schule bist kann die Aufgabe nicht so kompiziert sein.

Ich hab keine Lust dir alles aus der Nase zu ziehen.


----------



## kaper28 (23. Feb 2009)

Zed hat gesagt.:


> Nimm dir mal 20 min und schreib mal was du vor hast. Wenn du in der Schule bist kann die Aufgabe nicht so kompiziert sein.
> 
> Ich hab keine Lust dir alles aus der Nase zu ziehen.



sorry wollte dich nicht nerven....


try{
int theCount = countDatensaetze();
System.out.println("Anzahl: " + theCount);
}catch(SQLException e){
e.printStackTrace();
}

das ergibt mir die Summe von Datensätzen die Methode countDatensaetze() meine ich  ,das habe ich kapiert ... 

die variable theCount hat diese summe und wird ausgegeben( oben der code ) , das habe ich auch verstanden 

mein problem ist 

wie kann ich es auf einer Leiste ( einen JLabel )ausgeben 
wie 
Datensatz 1 von 10 zum beispiel 

wenn den next button drücke dann 

Datensatz 2 von 10 zum beipiel 

das ist mein problem


----------



## Javalist (24. Feb 2009)

Hast Du es denn schon geschafft, Deine 10 Datensätze aus der Datenbank zu holen?
Wenn Du das hast, kann man die dann immer noch zählen... Ich vermute mal, dass Du aber nichtmal die 10 hast.

Von daher solltest Du eher in Richtung "Datenbankverbindung" forschen.


----------



## kaper28 (24. Feb 2009)

Javalist hat gesagt.:


> Hast Du es denn schon geschafft, Deine 10 Datensätze aus der Datenbank zu holen?
> Wenn Du das hast, kann man die dann immer noch zählen... Ich vermute mal, dass Du aber nichtmal die 10 hast.
> 
> Von daher solltest Du eher in Richtung "Datenbankverbindung" forschen.



doch habe ich...


----------



## abollm (24. Feb 2009)

Mit Bezug auf professionelle RDBMS oder ORDBMS (Oracle et al.) sind in der Vergangenheit eine Reihe von mehr oder weniger intensiven Diskussionen darüber geführt worden, welche Abfragemethode zum Zählen der Datensätze einer Relation am günstigsten ist.

Hierzu kann der folgende Link für Oracle ein wenig Licht in die Sache bringen:

http://www.oracledba.co.uk/tips/count_speed.htm


----------



## Zed (24. Feb 2009)

Ich denke immernoch das der falsche Ansatz verfolgt wird. 

Wenn man die Anzahl der Datensätze in einer Leiste anzeigen will und mit einem Weiter-Button zum nächsten Datensatz will. Bringt es nix die Anzahl der Objekte der Datenbank zu kennen. Sondern mann muss sich die gewüschten Daten in einen Cache laden. Die Größe des Cache ist das was interessiert.


----------



## kaper28 (24. Feb 2009)

Zed hat gesagt.:


> Ich denke immernoch das der falsche Ansatz verfolgt wird.
> 
> Wenn man die Anzahl der Datensätze in einer Leiste anzeigen will und mit einem Weiter-Button zum nächsten Datensatz will. Bringt es nix die Anzahl der Objekte der Datenbank zu kennen. Sondern mann muss sich die gewüschten Daten in einen Cache laden. Die Größe des Cache ist das was interessiert.




Hallo Zed, 

Ich denke das kann nicht so kompliziert sein, weil wir in der Schule noch ganz kleine anfänger sind.Und so komplizierte Aufgaben geben die uns bestimmt nicht . In dieser Applikation habe ich einen Dialog-Fenster wo mit ich die Daten ändern kann . Und gahz untem am Fenster soll diese Leiste zur Anzeige der Datensatznummer stehen. 

Das wichtigste ist (habe heute noch mal den Lehrer gefragt ) 

Datensatz 1 von 4 zum beispiel 

das Bedeutet :

Wir haben in der Datenbank 4 Datensätze ( oder 4 verschiedene Datein mit der id-Nummer 1 ,2 3, 4 )

und die Leiste zeigt mir 

den ersten Datensatz ( oder id nummer ) von insgesamt 4 Datensatzen die inder Datenbank sind.


----------



## Zed (24. Feb 2009)

Das Problem ist man muss davon ausgehen das die ID der Datensätze fortlaufend sind. 

Datensate 1 ID 1
Datensate 2 ID 3
Datensate 3 ID 4
Datensate 4 ID 5


Die Leiste wird dann so aussehen Datensatz 5 von 4.

Blub schon habt ihr ein Problem. Der Ansatz mit dem Cache ist eigentlich eher einfach zu realisieren.

PS: Ich finde die Aufgabe eigentlich schon recht komplex für eine Schulaufgabe wenn man keinen Plan von Java hat.


----------



## kaper28 (24. Feb 2009)

Zed hat gesagt.:


> Das Problem ist man muss davon ausgehen das die ID der Datensätze fortlaufend sind.
> 
> Datensate 1 ID 1
> Datensate 2 ID 3
> ...



Zed, da hast du recht, für anfänger wie ich ist das echt kompliziert und zu viel denke ich .


----------

