# Daten aus Vektor in eine DB



## Vril (24. Jun 2005)

Hallo,

ich habe eine Klasse Tabelle in der mehrere Datensätze liegen:

```
public class Tabelle {
	
	public Verein[] tabelle = {
		
		new Verein ( 1, "Werder Bremen", 34, 22, 8, 4, "79:38", 74),
		new Verein ( 2, "FC Bayern München", 34, 20, 8, 6, "70:39", 68),
		new Verein ( 3, "Bayer 04 Leverkusen", 34, 19, 8, 7, "73:39", 65),
		new Verein ( 4, "VfB Stuttgart", 34, 18, 10, 6, "52:24", 64),
		new Verein ( 5, "VfL Bochum", 34, 15, 11, 8, "57:39", 56),
		new Verein ( 6, "Borussia Dortmund", 34, 16, 7, 11, "59:48", 55),
		new Verein ( 7, "FC Schalke 04", 34, 13, 11, 10, "49:42", 50),
		new Verein ( 8, "Hamburger SV", 34, 14, 7, 13, "47:60", 49),
		new Verein ( 9, "Hansa Rostock", 34, 12, 8, 14, "55:54", 44),
		new Verein (10, "VfL Wolfsburg", 34, 13, 3, 18, "56:61", 42),
		new Verein (11, "Borussia M'gladbach", 34, 10, 9, 15, "40:49", 39),
		new Verein (12, "Hertha BSC Berlin", 34, 9, 12, 13, "42:59", 39),
		new Verein (13, "SC Freiburg", 34, 10, 8, 16, "42:67", 38),
		new Verein (14, "Hannover 96", 34, 9, 10, 15, "49:63", 37),
		new Verein (15, "1.FC Kaiserslautern", 34, 11, 6, 17, "39:62", 36),
		new Verein (16, "Eintracht Frankfurt", 34, 9, 5, 20, "36:53", 32),
		new Verein (17, "TSV 1860 München", 34, 8, 8, 18, "32:55", 32),
		new Verein (18, "1.FC Köln", 34, 6, 5, 23, "32:57", 23),
	};
	public Verein[] getTabelle(){
		return tabelle;
	}
```
Nun habe ich eine Klasse Datenbank geschrieben, die eine neue Table Fussballer erzeugt. Jetzt wollte ich fragen kann ich die Datensätze aus Tabelle, also nur Nr, Name und Punkte irgendwie mit einer Schleife oder so in meinen Table Fussballer schreiben lassen?


----------



## bambi (24. Jun 2005)

Klar geht das!  :wink: 

Du musst einfach mit einer Schleife Deinen Vector durchlaufen und dann die jeweiligen Daten in die DB einfuegen. Falls
Du Fragen zum Insert hast, findest Du sicher auch ganz viele Beispiele dazu hier im Forum. Einfach mal Suchen...
Das hier ist glaub' ich ein ganz nettes Beispiel: http://www.java-forum.org/de/viewtopic.php?t=18371

Ansonsten bei konkreten Fragen/Problemen kannst Du ja mal den Code posten, den Du schon zum Insert hast...


----------



## Vril (24. Jun 2005)

Hm, ich scheitere eigentlich schon daran den Vector zu durchlaufen und auszugeben!
Hab in der public class Tabelle, nach return tabelle, folgendes eingegeben:

```
for (Enumeration el=tabelle.elements(); el.hasMoreElements(); ) {
      System.out.println((String)el.nextElement());
```
Was mache ich falsch?


----------



## bambi (24. Jun 2005)

Was meinst Du mit "nach return Tabelle"? Sowas?

```
public Verein[] getTabelle(){
      return tabelle;
      for (Enumeration el=tabelle.elements(); el.hasMoreElements(); ) {
          System.out.println((String)el.nextElement()); 
   }
```
Falls ja, das geht nicht, denn dann wird die for-Schleife ja gar nicht durchlaufen. Das return beendet die Methode.

Ansonsten. Schreib' immer mit, was genau Dein Problem ist und was passiert oder eben nicht geht - am besten waer'
natuerlich 'ne Fehlermeldung. Also alles posten, sonst koennen wir ja auch nicht wissen wo genau das Problem liegt...


----------



## Vril (24. Jun 2005)

Ok, also jetzt hab ich das return tabelle weggelassen, jetzt bekomme ich aber folgende Fehlermeldung:

cannot find symbol method elements()


----------



## bambi (24. Jun 2005)

Mhhh... das ist java 5, richtig? Da muss ich leider passen...   

Aber zum Testen kannst Du ja vielleicht mal sowas verwenden...
Du musst den Code sicher noch etwas anpassen. Aber so muesstest Du ja erst mal an Deine Objekte im Array
drankommen und schon mal den Eintag in die DB testen.

```
public Verein[] getTabelle(){
      return tabelle;
   }
   
   public void printNames()
   {
       int len = this.tabelle.length;
       Verein currVerein = null;
       for (int i = 0; i < len; i++) {
           currVerein = (Verein) tabelle[i];
           System.out.println(currVerein.name);
       }
   }
```


----------



## Vril (25. Jun 2005)

Ja, verwende Java 5. Aber jetzt wird schon mal fehlerfrei compilet und auch was ausgegeben.
Hab nur anstelle von
System.out.println(currVerein.name); 
System.out.println(currVerein); 
geschrieben.

Bei der Ausgabe werden jetzt alle Einträge ausgegeben, allerdings steht da jeweils immer:
Verein@mit verschiedenen Ziffern und Zeichen

Hier müsste ich wahrscheinlich das ganze noch in einen String umwandeln?

Jetzt stellt sich dann nur noch die Frage wie ich das konkret in die DB schreibe?


----------



## Guest (25. Jun 2005)

Du musst die Methode toString() in der Klasse Verein implementieren.
z.B.
	
	
	
	





```
public class Verein ...
{
  ...
  
  public String toString()
  {
    StringBuffer b = new StringBuffer(64);
  
    b.append("[")
     .append(vereinnr)
     .append(", ")
     .append(vereinname)
... usw.
     .append("]");
  
    return b.toString();
  }
}
```


----------



## Vril (25. Jun 2005)

Wenn ich das ganze in eine DB schreibe muß ich dann das ganze auch in einen String umwandeln oder geht das auch so?


----------



## Guest (25. Jun 2005)

Das mit Datenbank ist auch einfach.
	
	
	
	





```
Connection connection = ...; // woher auch immer
PreparedStatement statement = null;
...
try
{
  statement = connection.prepareStatement("INSERT INTO Verein(vereinnr, vereinname ...) VALUES(?,? ...)");
  
  for(int i=0; i<vereine.length; i++)
  {
    statement.setInt(1, vereine[i].vereinnr);
    statement.setString(2, vereine[i].vereinname);
    ...usw. mit anderen Feldern
    statement.addBatch();
  }

  statement.executeBatch();
...
}
catch(SQLException)
{
  ... Fehlerbehandlung
}
finally
{
  PreparedStatement und Connection schliessen
}
```
Mehr dazu findest Du in anderen Beiträgen hier im Forum.


----------



## Vril (26. Jun 2005)

Also ich hab das ganze jetzt so gemacht, jetzt wird zwar der komplette Vector durchlaufen, aber es werden nur lauter 0 und null werte geschrieben, an was könnte das liegen?


```
import java.sql.*;

public class AufgabeJDBC22 {
	Connection con ;
	Statement stmt ;
	
	
	public AufgabeJDBC22 () {
		try {	
	       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	        con = DriverManager.getConnection( "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=sbdemo"); 
		}
		 catch (Exception e) {
	        System.err.println("Fehler: " + e);	}
	}
	public void datenEintragen () {
		Tabelle meineTabelle = new Tabelle(); 
    Verein[] meinVerein = meineTabelle.getTabelle(); 
		try {	
			stmt = con.createStatement();
			for (int i=0; i<meinVerein.length;i++) {
				
			stmt.executeUpdate("INSERT INTO FTabelle VALUES ('"+meinVerein[i].getPlatz()+"','"+meinVerein[i].getName()+"','"+meinVerein[i].getTore()+"','"+meinVerein[i].getPunkte()+"')");	  
		  System.out.println(meinVerein[i].getPlatz());
					}
			}
			 catch (Exception e) {
		        System.err.println("*** Fehler: " + e);	}
	}
	
	public static void main(String[] args) {
		AufgabeJDBC22 test = new AufgabeJDBC22();
		//test.tabAnlegen ();
		test.datenEintragen ();
	}
	}
```
Hat zufällig jemand eine Idee an was das liegen könnte?


----------



## pro_evo (26. Jun 2005)

das liegt an der Klasse Verein ... aber das kann man mit den Angaben oben ned nachvollziehen, zum Verständnis zitier ich mal aus icq 



> Rakatack   26.06.20 03:23 warum sollten die Werte ned null sein ??
> 
> Rakatack   26.06.20 03:23 werden sie irgendwo gesetzt ? -> NEIN
> 
> ...


----------



## Vril (1. Jul 2005)

Geht aber trotzdem nicht, bzw. wird trotzdem nur 0 angezeigt.
Hier der Code, das mit this ist wohl doppelt gemoppelt:

```
public class Verein{
	
	public Verein(int platz,String name,int spiele,int siege, int unentschieden, int niederlagen, String tore,int punkte) {
	//public Vertreter(String name, String gebiet, int umsatz) 
	  
	  	this.Platz = Platz; 
			this.name = name; 
			this.spiele = spiele;
			this.siege = siege;
			this.unentschieden = unentschieden;
			this.niederlagen = niederlagen;
			this.spiele = spiele;
			this.tore = tore;
			this.punkte = punkte;
	  
		}
		private int Platz;
		private String name;
		private int spiele;
		private int siege;
		private int unentschieden;
		private int niederlagen;
		private String tore;
		private int punkte;
		
		public void setPlatz(int Platz){
			this.Platz = Platz;
		}
		public int getPlatz(){
			return Platz;
		}
		public void setName (String name) {
			this.name = name;
		}
		public String getName(){
			return name;
		}
		public void setSpiele(int spiele){
			this.spiele = spiele;
		}
		public int getSpiele(){
			return spiele;
		}
		public void setSiege(int siege){
			this.siege = siege;
		}
		public int getSiege(){
			return siege;
		}
		public void setUnentschieden(int unentschieden){
			this.unentschieden = unentschieden;
		}
		public int getUnentschieden(){
			return unentschieden;
		}
		public void setNiederlagen(int niederlagen){
			this.niederlagen = niederlagen;
		}
		public int getNiederlagen(){
			return niederlagen;
		}
		public void setTore(String tore){
			this.tore = tore;
		}
		public String getTore() {
			return tore;
		}
		public void setPunkte (int punkte){
			this.punkte = punkte;
		}
		public int getPunkte(){
			return punkte;
		}
		
}
```


----------



## Vril (1. Jul 2005)

Jetzt hab ich es!
Mein Problem war nicht der Konstruktor weil er nicht da, er war da, von anfang an, sondern mein Konstruktor weil da platz stand und bei den Methoden Platz.... Also Groß- und Kleinschreibung beachten bei Java!


----------

