# Update mit Prepared Statements



## Fridolin (16. Mai 2004)

Hallo,
kann mir wer sagen was an diesem Code Fragment nicht stimmt ich kann damit nicht in die Datenbank schreiben
ich bin mir ganz sicher das die Felder die richtigen Datentypen haben, aber vielleicht liegts an der Konvertierung
ich schreib euch das mal danke im voraus


```
try
{	
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
}
				
catch( ClassNotFoundException event )
{	
System.out.println ( "Fehler bei ODBC-JDBC Treiber Initialisierung" + event );
return;
}	
				
Connection con04 = null;
String sqlQuery04;
String updateids[] = new String[zeilen];					

                try
	{
	con04 = DriverManager.getConnection( url,"User","Password" );						
    	for(int i = 1; i < zeilen; i++)
    	{
    								
    	updateids[i] = (String)(model.getValueAt(i, 1));
											PreparedStatement update;
	String makeupdate = "UPDATE Film " + "SET ID = ? WHERE ID = ?";
	update = con04.prepareStatement(makeupdate);

	update.setInt(1, Integer.parseInt(updateids[i]));
	update.setInt(2, i);
									update.executeUpdate();
									
	}
    									
	}
  					
  	catch( SQLException event)
	{
	System.out.println( "Fehler bei Tabellenabfrage " + event);	
	return;
	}	
						
	                finally
		{
      					
      		try
      		{
      		if ( con04 != null )
        		{
        		con04.close();
      		}
      		}
      					
      		catch ( SQLException event ) {}
    						
    		}
```


----------



## nollario (17. Mai 2004)

wie laut denn deine fehlermeldung?

den teil


```
update = con04.prepareStatement(makeupdate);
```

würde ich aber vor die for schleife holen... einmal preparen reicht doch - das ist doch
gerade das witzige an PreparedStatements

Saludos

Christian


----------



## Gast (17. Mai 2004)

Hallo

Ich bekomme gar keine fehlermeldung aber ich werde deinen vorschlag einmal ausprobieren danke


----------



## Fridolin (18. Mai 2004)

Nein, das war es nicht, ich habe das preparedStatement jetzt vor die schleife gesetzt! 
weiß vielleicht wer woran es noch liegen könnte?


----------



## Fridolin (19. Mai 2004)

Bitte kann mir wer ein Beispiel für ein Insert mit Prepared Statements hier hinein schreiben ?


----------



## P3AC3MAK3R (19. Mai 2004)

1. Google-Hit:

http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html


----------



## Gast (19. Mai 2004)

Hallo!

Existiert der Datensatz, den Du mit dem Update - Kommando ändern willst bereits ? Mit update kannst Du nämlich nur bestehende Datensätze ändern, aber keine neuen anlegen. Um einen neuen Datensatz anzulegen, musst Du die SQL Insert - Anweisung verwenden: INSERT INTO Film (id) VALUES (?).

Grüsse,
--Alex


----------



## Fridolin (19. Mai 2004)

Ja der Datensatz existiert bereits weil ich meine JTable mit Datensätzen aus der Datenbank zu Beginn fülle
und dann nur noch einen Namen darin ändere und wieder zurückschreiben will. Das ist also nicht der Abfragebereich 
mit WHERE und danke Peacemaker aber mit der sun API hab ich mir mein Prepared Statement aufgebaut 
Es kommen immer Fehlermeldungen wie cant processMouseEvent cant pumpEventForHierarchy aber das liegt an meinem MouseAdapter den kann ich wegschalten aber aber auch ohne kommen so ähnliche ich schreib euch wenn ich zuhause bin und die fehlermeldung sehe


----------



## P3AC3MAK3R (19. Mai 2004)

Der Link führt nicht zum Java-API sondern zum Java-Tutorial.


----------



## Fridolin (19. Mai 2004)

Ja genau das hab ich mir angeschaut mir ist eine geniale Idee :idea:  gekommen 
ich schreib ganz einfach in jedes Event, für jeden Klick auf einen Button Anlegen, 
Ändern oder Löschen in ein String Array meine Abfrage und erhöhe einen Zähler
um 1 und mache meine Änderungen endgültig indem ich das Array von 0 bis Zähler
durchgehe und jede Abfrage in einem try catch Block innerhalb einer for Schleife mache
wenn ich auf den Button OK drücke was sagt ihr dazu?


----------



## Fridolin (19. Mai 2004)

Stimmt diese Abfrage in der Form?


```
namen = name.getText();
	
identifikation = id.getText();

sqlQuery[i] = "INSERT INTO Film VALUES (" + Integer.parseInt(identifikation) + ", 
'"+namen+"', "+Integer.parseInt(dauer.getText())+", "+Integer.parseInt(alter.getText())+");";
```
wobei die Datentypen in meiner Datenbank wie folgt sind identifikation = Zahl
                                                                                    namen = Text
                                                                                        dauer.getText = Zahl
                                                                                            alter.getText = Zahl
diese String Arrays stehen in jedem Event meiner Buttons und in jedem Event wird auch der Zähler i zum Schluß
erhöht Das ist die Abfrage selbst 


```
try
{
con04 = DriverManager.getConnection( url,"User","Password" );
stmt04 = con04.createStatement();
							
for(int s = 0; s < i; s++)
{
stmt04.executeUpdate( sqlQuery[s] );
}
										
stmt04.close();
}

catch( SQLException event)
{
System.out.println( "Fehler bei Tabellenabfrage " + event);	
return;
}
```


----------

