# insert funzt net richtig



## T1M (22. Aug 2005)

Hi,
ich hol aus ner db daten in eine jtable. wenn ich eine leere zeile etwas reinschreibe und auf den button auf dem der insertbefehl liegt klicke, schreibt er mir aber in die ganze zeile nur null, bzw. 0.
warum liest er mir des array data nicht aus und überträgt es in die db?

gekürzt:


```
public Tafel(DBFrids db)
	{
...
int b = Integer.parseInt(dbfrids.getRowCount());
		for (int i=0; i<b; i++)
		{
			data[i][0]= pats[i].getStation();
			data[i][1]= pats[i].getName();
      }
...
tafel_aktual.addActionListener(new ActionListener()
        		{
			public void actionPerformed(ActionEvent e)
			{
				int b = Integer.parseInt(dbfrids.getRowCount());
				try
				{
					//KreissaalPat[] pats = new KreissaalPat[b];
					for (int i=0; i<b; i++)
					{
						System.out.println("aktualisieren; in der for-schleife");
						System.out.println("STation; " + Station);
						System.out.println("Name: " + Name);

						dbfrids.deleteKrsTafel(Station, Name);

					}
					dbfrids.insertKrsTafel(Station, Name);
					table.repaint();
					table.validate();
				}
				catch(Exception ex)
				{
					String a = "Fehler bei update";
				}
			}
		});
```


```
public class DBFrids extends Object {
    ...
public void insertKrsTafel(String Station, String Name)
    {
    		System.out.println("in Insert");
    		
    		String sql = "insert into krstafel2 " +
			 "( station, name,) " +
			 "values('" + Station + "', '" + Name + "') ";
    		System.out.println("vor exe");
    		System.out.println("***** insert: " + sql);
        	exeSql(sql);
        	System.out.println("Station: " + Station);
         	System.out.println("Name: " + Name);
    }
nach dem buttonklick steht in der db dann anstatt z.b. test1, test2 nur null, null.
hoffe ihr wisst da weiter.
Danke,
 T1M
```


----------



## bambi (22. Aug 2005)

Also mir erscheint das 2te Komma in "( station, name,) " schon mal sehr merkwuerdig... Liegt's daran?

Ansonsten: was ist denn mit dem Statement? Wird das korrekt erstellt? Wie sieht es denn aus, wenn Du's Dir mal aus-
geben laesst. Versuch einfach mal das vom Java erstellte SQL direkt auf der DB auszufuehren.

Was ist mit der SQLException - wird die geworfen?


----------



## T1M (23. Aug 2005)

ne, das komma is da, weil da eigentlich noch andere sachen stehen. hab die der übersich halber hier weggelassen.
das sql statement is korrekt und ne fehlermeldung bekomm ich net.
in station, name, etc. steht aber immer nur null drin, wenn er den insert macht.
da ich ja in die jtable reinschreibe müsste er doch n neues data_[x] anlegen, oder? und das muss dann in die db übertragen werden.
aber wie? oder lieg ich da falsch.
hatte mir auch überlegt, aber soweit binn ich noch net, bei jedem insert/update den kompletten inhalt der db (is net all zu groß) zu löschen und dann mit dem was in der jtable steht neu einzulesen. ist das sinnig?
danke für die antwort!
T1M_


----------



## bambi (23. Aug 2005)

Was macht denn "exeSql(sql);"? Vielleicht liegt's ja daran - kannst Du das mal posten?


----------



## T1M (24. Aug 2005)

sicher kann ich das!   
aber daran wirds net liegen.

```
public class DBFrids extends Object {
    ... 
/** notwendige Methode um insert, update und delete auszuführen
 * @param sql  */    
     private void exeSql(String sql)
     {
         //dbg.debug(sql);
            try
            {
               Statement statement = db.createStatement();
                statement.execute(sql);
                statement.close();
                db.commit();
                
            } catch (Exception e)
            {
                dbg.debug("Fehler in exeSql: " + e.toString());
                System.out.println("in exeSql: " + e.toString());
                rollbackMeth();
            }    
           
     }
...
}
```

bei dem einlesen der daten in die jtable geh ich über diese klasse:

```
import java.util.Date;

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 getStation()
	{
	//	System.out.println("Station aus KreissaalPat: " + Station);
	//	Funktioniert: richtiger String steht in Station
	    return Station;
	}
	
	public String getName()
	{
	//	System.out.println("Name aus KreissaalPat: " + Name);
	    return Name;
	}
}
```

Statement in der DB-Klasse



```
]public class DBFrids extends Object {
    ... 
public KreissaalPat[] getKrspat()
    {
    	System.out.println("getKrspat()");
    	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 Station = daten.getString("station");
             	String Name = daten.getString("name");
             	
             	
             	patienten[i] = new KreissaalPat(Station, Name);
             	/*System.out.println("patienten[i]: " + patienten[i]);
             	System.out.println("Station: " + Station);
             	System.out.println("Name: " + Name);
             	//Funktioniert: Richtiger Inhalt wird eingelesen und in
             	//KreissaalPat.java übergeben
             	
             	i++;
             }
        daten.close();
        query.close();
        }
        catch(Exception e) {System.out.println("!!!Fehler in Abfrage: "+ e);}
        
        return patienten;
    }
}
```

Übergabe an JTable in Klasse Tafel


```
public class Tafel extends JFrame
implements ActionListener
{
...
   public Tafel(DBFrids db)
	{
...
pats = dbfrids.getKrspat();
		int b = Integer.parseInt(dbfrids.getRowCount());
		for (int i=0; i<b; i++)
		{
			data[i][0]= pats[i].getStation();
			data[i][1]= pats[i].getName();
		}
...
}
}
```

mit den letzten drei codetags füll ich meine JTable. Dachte ich könnte den insert analog dazu machen. aber habs net hinbekommen ... :? 
Wieder mal vielen Dank!


----------



## T1M (25. Aug 2005)

verdammt, warum war da n haken dran???
des is noch net gelöst! :cry:


----------



## Jörg (25. Aug 2005)

Deine Daten stehen in 

```
System.out.println("***** insert: " + sql);
```
richtig drin??

Hast probiert die Query mal mit nem DBTool auszufuehren??
Gehts damit??


----------

