# DB und JTable . brauche Hilfe



## T1M (2. Aug 2005)

Hi,
ich möchte das ergebnis einer select anweisung in eine jtable packen.
den db connect hab ich hinbekommen.   hab mir auch was überlegt wie es gehen sollte ... theoretisch ..., praktisch klappts leider net. :? 
aber ich denk mal, ihr seht scho, worans liegt.
ok, hauptklasse ist klasse Tafel. darin liegt die jtable, da wird der db-connect gemacht.
klasse KreissaalPat beinhaltet die variablen und methoden um die strings aus der klasse DBFrids auszulesen. hier gibt es die methode getKrspat(), wo die sql anweisung drinsteht.
ich möchte für jeden patienten ein neues objekt anlegen, welches in eine zeile der jtable soll.

DBFrids:

```
...
public KreissaalPat[] getKrspat()
    {
    	System.out.println("getPatienten");
    	int i=0;
    	KreissaalPat[] patienten= new KreissaalPat[100];
    	String sql = "select station, name " +
    			"from krstafel2";
    
        Statement query = null;
        ResultSet daten = null;
        
        try 
        {
             query = db.createStatement();
             daten = query.executeQuery(sql);
             while(daten.next())
             {
             	String Name = daten.getString("name");
             	String Station = daten.getString("station");;
             	
             	patienten[i] = new KreissaalPat(Station, Name);
             	i++;
             }
        daten.close();
        query.close();
        }
        catch(Exception e) {System.out.println("Fehler in Abfrage: "+ e);}
        
        return patienten;
    }
}
```

KreissaalPat

```
public class KreissaalPat extends Object
{
	private String Station;
	private String Name;
	
	
	public KreissaalPat()
	{
		initPat();
	}
	
	public KreissaalPat(String stat, String na)
	{
		Station=stat;
		Name=na;

	}
	
	public void initPat()
    {
		 Station = "";
		 Name = "";
    }
	
	public String getName()
	{
	    return Name;
	}
	
	public String getStation()
	{
	    return Station;
	}
}
```

Tafel (hier gibts probleme)

```
...
  KreissaalPat[] pats = new KreissaalPat[100];
	  
	  	DBFrids db = new DBFrids("FRIDS_TEST");
	  	pats = db.getKrspat();
		
	  
	  Object[][] data = new Object[][];
	  
	  for (int i=0;i<=99;i++)
	  {
	  	for (int j=0;j<=99;j++)
	  	{
	  		data[i][j]=
	  		{
	  				pats[i].getStation(), pats[i].getName()
			};
	  	}
	  	
	  }
...
```

JTable

```
model = new DefaultTableModel(data, columnNames);
        table = new JTable(model)
		{
	     public Class getColumnClass(int i)
	     {
	     	return Object.class;
	     }
	   };
```
Also, mein prob is, das das so net geht. hoffe ihr könnt mir weiterhelfen.
Danke,
 T1M


----------



## T1M (2. Aug 2005)

habs mal weiterversucht.

```
KreissaalPat[] pats = new KreissaalPat[100];
	  
	  	DBFrids db = new DBFrids("FRIDS_TEST");
	  	pats = db.getKrspat();
	
	  	for (int i=0;i<=99;i++)
		  {
		  	for (int j=0;j<=99;j++)
		  	{
		  		Object[][] data =
		  		{
		  				pats[i].getStation(), pats[i].getName(), pats[i].getP_(), pats[i].getET(),
		  				pats[i].get.SSW(), pats[i].getG(), pats[i].getP(), pats[i].getF(),
		  				pats[i].getLage(), pats[i].getDiagnose(), pats[i].getTherapie(),
		  				pats[i].getV(), pats[i].getCTG(), pats[i].getInf(), pats[i].getAufkl()
		  		};
		  				
		  	}
		  	
		  }
```
es kommen noch zwei fehler:
das semikolon in zeile 3 wird unterstrichen: Syntax error on token ";", { expected after this token
und bei pats_.getStation() (und dann den anderen türlich auch) sagt er: Type mismatch: cannot convert from String to Object[]

THX anyway,
   T1M_


----------



## T1M (2. Aug 2005)

neuste variante:


```
KreissaalPat[] pats = new KreissaalPat[100];
	  	//DBFrids db = new DBFrids("FRIDS_TEST");
	  	pats = dbfrids.getKrspat();
	  	
	
	  	for (int i=0;i<=99;i++)
		  {
	  		data[i][0]= pats[i].getStation();
	  		data[i][1]= pats[i].getName();
		  }
```
jetzt bekomm ich aber eine ArrayIndexOutOfBoundsException.
hab das dazu gefunden: Die ArrayIndexOutOfBoundsException tritt auf, wenn versucht wird, ein Array mit einem ungültigen Index anzusprechen.
ok, und das heißt für mich jetzt ... was???


----------



## Roar (2. Aug 2005)

entweder es gibts data_ oder parts nicht. ich würd mal auf letztens tippen...

btw: es heißt Kreißsaal oder Kreisssaal _


----------



## T1M (2. Aug 2005)

müsste ich dann

```
KreissaalPat[] pats[] = new KreissaalPat[100];
```
schreiben?
btw. es heißt pats, nicht parts ... :bae:


----------



## Roar (2. Aug 2005)

nein, müsstest du nicht, weils quark ist, was soll das bringen. die antwort bleibt gleich: entweder es gibt data_ oder *pats* nicht. ich würd mal auf letzeres tippen. warum überprüfst du in der for schleife auch auf <= 99 ? woher willst du wissen dass da 100 elemente dri nsind? überprüfe auf < pats.length und vermultlich kriegst keine excption mehr.

warum verwendest du eigentlich keine listen? dann könntest du dir den arrayquark sparen :-/_


----------



## T1M (2. Aug 2005)

hmm.., das mit dem pats.length is ne coole idee!
und warum ich keine listen verwende ..., wahrscheinlich weil ich n noob bin und davon kaum ahnung habe. und von listen goar keine. :? 
aber warum gibt es pats denn net? ich initialisiere es doch?!


> KreissaalPat[] pats = new KreissaalPat[100];


oder?
hmm.., morgen mal weiterversuchen. hab das prog net daheim.


----------



## Bleiglanz (3. Aug 2005)

T1M hat gesagt.:
			
		

> hmm.., das mit dem pats.length is ne coole idee!
> und warum ich keine listen verwende ..., wahrscheinlich weil ich n noob bin und davon kaum ahnung habe. und von listen goar keine. :?
> aber warum gibt es pats denn net? ich initialisiere es doch?!
> 
> ...


du erzeugst zwar ein array, aber 

pats[0]==pats[1]==....==pats[99]=null

(ein array wird immer mit nullen initialisiert)


----------



## T1M (3. Aug 2005)

Bleiglanz hat gesagt.:
			
		

> (ein array wird immer mit nullen initialisiert)


und deswegen bekomm ich ne ArrayIndexOutOfBoundsException?
bekomm ich im übrigen auch mit pats.length.  
wie muß ich das denn sonst machen, dass er pats kennt?


----------



## T1M (3. Aug 2005)

humpf,
habs mal n bissl umgeschrieben. jetzt bekomm ich keinen fehler mehr, allerdings ist das panel, in dem die jtable liegen sollte leer ...

```
...
public void getDaten()
	{
		System.out.println("getDaten");

	 String[] columnNames =
	 {
	 		"Station",
            "Name",
	};
	  	  
	  
	 //XXXXXXXXXXXXXXXXXXX So oder so ähnlich  XXXXXXXXXXXXXXXXXXXXXXXXXX	
	  	
	  	//DBFrids db = new DBFrids("FRIDS_TEST");
	  System.out.println("vor getKrs: " + pats);	
	  pats = dbfrids.getKrspat();
	  System.out.println("nach getKrs: " + pats);
	  
	  for (int i=0; i<pats.length; i++)
	  {
	  	data[i][0]= pats[i].getStation();
	  	data[i][1]= pats[i].getName();
	  }
	  System.out.println("nach for-schleife: " + pats);
	  model = new DefaultTableModel(data, columnNames);
      table = new JTable(model)
		{
	     public Class getColumnClass(int i)
	     {
	     	return Object.class;
	     }
	   };
	   
	  add(table, panel_table, gbc, 0, 0, 1, 1);
	  table.getTableHeader().setReorderingAllowed(false); //kein verschieben der columns
	   table.setRowHeight(table.getRowHeight() + 35); // Zeilenhöhe festlegen
	   table.setFont(new Font("Arial", Font.TRUETYPE_FONT, 10));
	   table.getCellEditor(row, column);

	   //Spaltenbreite festsetzen
	   TableColumn tcolumn = table.getColumn("Station");
	   tcolumn.setMinWidth(40);
	   tcolumn.setMaxWidth(40);
	   tcolumn = table.getColumn("Name");
	   tcolumn.setMinWidth(120);
	   tcolumn.setMaxWidth(120);

	   table.setDefaultRenderer(Object.class, new ColorTableCellRenderer()); //Typ Object,
		//Table wird im gegensatz zu Color.class editirbar!!!
	}
...
```
liegt das daran, dass die anderen panels, buttons, etc. in 'public Tafel(db){...}' liegen???

edit: bei der ausgabe steht das die jtable null ist. aber es sind daten in der db vorhanden. warum schreibt er dann nix in die jtable???

edit2: hab mal aus public void, public Objext gemacht und am ende return table; - bringt auch nix ... 

edit3: so, habs jetzt mal in public Tafel() gepackt:

```
...
String[] columnNames =
    {
          "Station",
            "Name",
   };
              
    //XXXXXXXXXXXXXXXXXXX So oder so ähnlich  XXXXXXXXXXXXXXXXXXXXXXXXXX   
        
        //DBFrids db = new DBFrids("FRIDS_TEST");
          KreissaalPat[] pats = new KreissaalPat[100];
     System.out.println("vor getKrs: " + pats);   
     pats = dbfrids.getKrspat();
     System.out.println("nach getKrs: " + pats);
    
     for (int i=0; i<pats.length; i++)
     {
        data[i][0]= pats[i].getStation();
        data[i][1]= pats[i].getName();
        }
     System.out.println("nach for-schleife: " + pats);
   } 
...
```
aber jetzt bekomm ich das: Exception in thread "main" java.lang.NullPointerException at Tafel.<init>(Tafel.java:409) (hier: zeile 18 )
hiiiiilfeeee!!!!!!


----------

