# Datenbank Abfrage: Es fehlt immer ein Eintrag!



## Bernhard (4. Apr 2007)

Hallo,

ich möchte mit JAVA eine Datenbankabfrage machen, alles funktioniert nur das immer genau ein (der letzte) Eintrag der Tabelle nicht ausgegeben wird.

Hier der Code zur Abfrage:

 while(result.next()){ 
			 for (int i=1;i<= columnCount;i++ ){
		 System.out.println(result.getString(i)); // 
		   }
		  }

Bitte um Hilfe!

Danke!


----------



## The_S (4. Apr 2007)

Die letzte Zeile oder die letzet Spalte?

Bei Zeile: Es wird einfach nicht mehr gefunden

Bei Spalte: columnCount stimmt so oder muss das evtl. um 1 größer sein?


----------



## L-ectron-X (4. Apr 2007)

Ändere mal den Kopf der Schleife:

```
for (int i = 0; i < columnCount; i++)
```
Vielleichts gehts dann...


----------



## The_S (4. Apr 2007)

L-ectron-X hat gesagt.:
			
		

> Ändere mal den Kopf der Schleife:
> 
> ```
> for (int i = 0; i < columnCount; i++ )
> ```



Da wird er wohl ne Exception bekommen ...


----------



## Bernhard (4. Apr 2007)

Danke für die Antworten erst mal.

Nein, es fehlt immer genau eine Zeile:

Datenbank Kunden


```
id firma adresse
1 Huber Testgasse 1
2 Maier Testgasse 2
3 Gruber Testgasse 3
```

Wenn ich das auslese von der Datenbank kommt nur id 1 und 2 - die dritte fehlt:


```
Ausgabe Console mit "SELECT * FROM kunden ORDER BY 1 DESC"
1 Huber Testgasse 1
2 Maier Testgasse 2
```


```
Ausgabe Console mit "SELECT * FROM kunden"
2 Maier Testgasse 2
3 Gruber Testgasse 3
```

Hier die Klasse DATENBANK


```
public ArrayList<ArrayList> readOutNormal(String command) throws IOException, SQLException{
		
		//Neue ArrayList wird erstellt(Multi)
		arrayL = new ArrayList<ArrayList>();
		
		//Hinzufügen zu Arraylist von 3 ArrayLists (INT, String,INT)
		arrayL.add(new ArrayList<Integer>()); //ID
		arrayL.add(new ArrayList<String>());  //Firma
		arrayL.add(new ArrayList<String>());  //Zusatz
		arrayL.add(new ArrayList<String>());  //Strasse
		arrayL.add(new ArrayList<String>());  //PLZ_ORT

		
		Connection conn = getConnection();
		Statement stat = conn.createStatement();
		
		ResultSet result=stat.executeQuery(command);
		result.next();
		

		//Datenbank wird in ArrayList eingelesen
		while(result.next()){
			
	
			int tmp=result.getInt(1); //ID
			String tmp1=result.getString(2); //Firma
			String tmp2=result.getString(3); //Zusatz
			String tmp3=result.getString(4); //Strasse
			String tmp4=result.getString(5); //PLZ_ORT
			
			arrayL.get(0).add(0, tmp);
			arrayL.get(1).add(0, tmp1);
			arrayL.get(2).add(0, tmp2);
			arrayL.get(3).add(0, tmp3);
			arrayL.get(4).add(0, tmp4);
			
		

		}

		result.close();
		stat.close();
		return arrayL;
	}
```


DANKE!


----------



## Guest (4. Apr 2007)

Es fehlt immer die erste Zeile.  :wink: 
Siehe Zeile 18 in deinem Code. das result.next(); überliest die eine Zeile.

Das sind so Momente, wo man sich selbst mit Anlauf in den A... tretten möchte, was?  :bae:


----------



## Guest (4. Apr 2007)

Übrigens, gestalte den Code etwas um, damit du immer die Connection freigibst.
So, wie du es z.Z. hast, kann es dazu kommen, dass du sie nicht schliesst.

Mindestens ein finally-Block, wo Statement und Connection freigegeben werden
	
	
	
	





```
Connection conn = null;
Statement stat = null;

try
{
   conn = getConnection(); 
   stat = conn.createStatement();
   
   ... rest
}
finally
{
   if(stat != null)
   {
      try { stat.close(); } catch(SQLException e) { ... Fehler loggen }
   }
   if(conn != null)
   {
      try { conn.close(); } catch(SQLException e) { ... Fehler loggen }
   }
}
```


----------



## Bernhard (4. Apr 2007)

Vielen Dank!

*Es kann so einfach sein...*



 :applaus:  :applaus:  :applaus:  :applaus:  :applaus:


----------

