# Insert, delete einer Datenbank



## Sarah Schüßler (26. Januar 2008)

Hallo!

Nachdem ich bereits die Suchfunktion benutzt habe und nicht so wirklich das passende gefunden habe, wollte ich euch fragen, wie man in einer Datenbank dynamisch, also über eine Handeingabe des Benutzers("externen Fensters") eine neue Zeile einfügt oder eine alte löscht. 
Hier habe ich etwas ähnliches gefunden: http://www.tutorials.de/forum/java/199212-jdbc-delete-aus-datenbank.html

Jedoch versteh ich die switch-Schleife nicht genau; greift  if (i == 1)  auf die Spaltennummer zurück? Wenn ja wäre das ja echt klasse!

Hoffe ihr könnt mir ein wenig helfen!


----------



## zeja (26. Januar 2008)

Switch-Schleifen gibt es schonmal gar nicht! Es heißt Switch-Statement...

Und nein das ist einfach nur eine Entscheidung aus welcher Tabelle gelöscht werden soll, wie es da doch steht.

http://dev.mysql.com/doc/refman/5.1/de/index.html
Bei dem Link findest du alle Statements die es so gibt, vielleicht machst du dich da mal ein wenig schlau.


----------



## Sarah Schüßler (26. Januar 2008)

Danke dir für den Hinweis!

Da ich nur eine Tabelle habe benötige ich die switch-Anweisung nicht..

Habe nun dieses hier "zusammengestellt":

```
int recordsUpdated;
.....
System.out.println("Bitte einen gültigen Zelltupelschluessel eingeben:");
			zeichenkette = br.readLine();
			st = con.createStatement();
			
			recordsUpdated  = st.executeUpdate("INSERT INTO celltuple "
				+ zeichenkette);
			
			//Wenn keine Daten in Zeichenkette, Hinweis auf EIngabe "falscher ID"
			if (zeichenkette == null){
				System.out.println("Sie haben nichts eingegeben:");
				System.out.println("Bitte überprüfen Sie Ihre Eingabe.\n");
			};
```

Jedoch zeigt mir eclipse an dass die lokale Variable recordsUpdated niemals gelesen wird..woran liegt es?
Wenn ich mehrere Attribute in die Tabelle einfügen will, funktioniert aber meine Anweisung wahrscheinlich nicht, denn ich benötige ein Array oder ähnliches. Oder?
Würde mich über Tipps, etc freuen!


----------



## TheJadix (26. Januar 2008)

Hallo,

darf man fragen warum du erst den Datenbankzugriff machst ohne die Eingabe
zu überprüfen aber danach noch ein if durchfürst um eine falsche Eingabe
zu bemängeln ?

Setz doch das exequteUpdate() in einen else Teil deiner if Abfrage !

Wenn du den int-Wert von recordsUpdatet() eh nicht nutzt, kannst du die
zuweisung einfach weglassen ! Eclipse nimmt das da etwas genau, wenn
man Variablen deklariert um sie dann nicht zu benutzen 

also z.B. : 


```
if ( (zeichenkette == null) || zeichenkette.equals("") ) {
	System.out.println("Sie haben nichts eingegeben:");
	System.out.println("Bitte überprüfen Sie Ihre Eingabe.\n");
 } else {
 
  st.executeUpdate("INSERT INTO celltuple "+ zeichenkette);
 }
```

Gruß JAdix


----------



## Sarah Schüßler (26. Januar 2008)

Danke für den Hinweis! Werde ich sofort verbessern!

Kann mir jemand evtl. noch einen Tipp geben wie ich einzelne Attribute in die Datenbank bekomme? Also mit System.in, wobei hier nicht die selbe Syntax angewendet wird wie bei System.out-aber das wisst ihr sicher ..oder ist die vorherige Lösung mit Insert into.. besser?
Hab das bis jetzt so verwirklicht, aber das System.in nimmt er nicht bzw auch die Variante  siehe erste Zeile nicht..

```
int id = getid("Bitte eine ID"));
		long node = System.in("Bitte eine node");
		long edge = System.in("Bitte eine edge");
		long face = System.in("Bitte eine face");
		int sign = System.in("Bitte ein sign");

               stmt.setInt(1, id);
		stmt.setLong(2,node);
		stmt.setLong(3,edge);
		stmt.setLong(4,face);
		stmt.setInt(5,sign);
```


----------



## MeinerEiner_80 (26. Januar 2008)

Moin!
Natürlich funktioniert das nicht. Glaubst du, du kannst irgendwelche Fantasiemethoden errstellen, und der Compiler schluckt das?
Wie wärs, wenn du einfach mal nachschauen würdest, wie man etwas über die Tastatur einliest?  Hier im Forum und auch über Google, gibts echt genug Beispiele dazu!

*grüssle*
MeinerEiner


----------



## TheJadix (27. Januar 2008)

Hallo, 

würde es in Java eine Methode wrappPostInNiceWords(String Post) geben, und man
würde dann den vorhergehenden Post übergeben, käme als Rückgabe :

Du bringst da aber noch gehörig etwas durcheinander !

Aber wrappPostInNiceWords ist auch nur ne Fantasiemethode ! 

Und auf Posts die in Richtung "Kann mir jemand Java erklären" reagiert man
hier leider oft etwas angesäuert !

Du solltest dich intensiv mit der Java-API beschäftigen, tauchen dann Fragen
auf hilft man Dir aber sicher gern !

Grüße JAdix


----------



## Sarah Schüßler (27. Januar 2008)

Sorry! Ja versteh dass schon wenn da jeder "Depp" was ins Forum schmeißt.. Nu war wahrscheinlich teilweise mein Problem dass ich aus zu vielen Quellen mir was zusammengeschustert hab, und auch tweilweise halbe Sachen, etc..
Naja hab es jetzt mit Statements und SQL Strings gelöst..muss ich aber noch mal endgültig überprüfen


----------



## Sarah Schüßler (27. Januar 2008)

Hi!

Also ich hab das ganze jetzt so realisiert, jedoch habe ich noch das problem des einlesens der Variablen..
Mein Code: (habe hier bißchn rumprobiert mit dem Typ von zeichenkette, aber das ist es ja nicht)
Zelltupel.java

```
public static String einfuegen() throws SQLException {
		String zeichenkette1;
		Long zeichenkette2;
		String zeichenkette3;
		String zeichenkette4;
		String zeichenkette5;
		String zeichenkette7;
		String zeichenkette8;
		String zeichenkette9;
		String zeichenkette10;
		
		String query = "INSERT INTO celltuple(id, node_id,edge_id,face_id,sign, node_inv, edge_inv,face_inv,flags)VALUES(?,?,?,?,?,?,?,?,?) ";
		
		PreparedStatement stmt =GMap.con.prepareStatement(query);
		
		
			stmt.setInt(1, GMap.zeichenkette1);
			stmt.setLong(2, zeichenkette2);
			stmt.setLong(3, zeichenkette3);
			stmt.setLong(4, zeichenkette4);
			stmt.setInt(5, zeichenkette5);
			stmt.setInt(7, zeichenkette7);
			stmt.setInt(8, zeichenkette8);
			stmt.setInt(9, zeichenkette9);
			stmt.setInt(10, zeichenkette10);
			int aenderung = stmt.executeUpdate();
	
		    if(aenderung >0) {
		    System.out.println(aenderung + "Zeilen eingefügt");
		    }else {
		      System.out.println("keine Zeilen eingefügt");
		    }
		      
		stmt.close();
		GMap.con.close();
				
		
	}
```
Andere Datei(GMap.java):

```
System.out.println("Bitte eine gültige Zelltupelschluessel-ID eingeben:");
			zeichenkette1 = br.readLine();
			System.out.println("Bitte eine gültige Node-ID eingeben:");
			zeichenkette2 = br.readLine();
			System.out.println("Bitte eine gültige Edge-ID eingeben:");
			zeichenkette3 = br.readLine();
			System.out.println("Bitte eine gültige Face-ID eingeben:");
			zeichenkette4 = br.readLine();
			System.out.println("Bitte eine gültige sign eingeben:");
			zeichenkette5 = br.readLine();
			System.out.println("Bitte eine gültige  inverse node eingeben:");
			zeichenkette7 = br.readLine();
			System.out.println("Bitte eine gültige  inverse edge eingeben:");
			zeichenkette8 = br.readLine();
			System.out.println("Bitte eine gültige inverse face eingeben:");
			zeichenkette9 = br.readLine();
			System.out.println("Bitte eine gültige flags eingeben:");
			zeichenkette10 = br.readLine();
			
			st = con.createStatement();
			
			if (zeichenkette1 == null || zeichenkette1.equals("")){
				System.out.println("Sie haben nichts eingegeben:");
				System.out.println("Bitte überprüfen Sie Ihre Eingabe.\n");
			} else{
				Zelltupel.einfuegen();
				
			}
```

Ich weiß dass ich nur bei der ersten zeichenkette eine Fehlerbehandlung habe..jedoch ist ja das größere Problem die Variablen(-typen)  beim einlesen..
Wäre toll wenn mir jemand einen Tipp geben könnte!


----------



## TheJadix (27. Januar 2008)

Hallo,

Dir ist aber schon klar dass eine Zeichenkette eine Zeichenkette bleibt auch wenn
man eine Zahl eingegenben hat ? ? ?

Aber als kleiner Tip am Rande !

Schau Dir mal die statische Klassenmethode parseInt von Integer an,
bzw. parseLong der Klasse Long !

Die umgewandelten Werte kannst du dann in dein preparedStatement schreiben !

Gruß JAdix


----------



## Sarah Schüßler (27. Januar 2008)

Danke dir!
Das war mir schon klar deshalb meine Frage..hatten das parseInt in der Vorlesung noch nicht, deshalb bin ich da nicht sofort drauf gekommen! Werde gleich mal nachschauen und versuchen das umzusetzen!


----------

