# Neue Zeile in DB anlegen



## Limosan (12. Jun 2014)

Hey Leute, hoffe mir kann jemand helfen.. Undzwar hab ich für mein Login eine JDBC Verbindung hergestellt, anmelden mit Benutzer und Pw läuft alles, jedoch möchte ich nun 

aus meinem Programm ein neuen Benutzer anlegen.

Ich habe folgenden Code verwendet, jedoch springt das Programm nicht aus der While schleife wenn kein Benutzer gefunden wurde..


```
public static void neuAnlegen(String name, String passwort)
	{
		loginVerbi = getInstance();

		if(loginVerbi != null){
			Statement query;
			try {
				query = loginVerbi.createStatement();
				String pruefen = "SELECT benutzername FROM login WHERE benutzername LIKE '"+ name +"'";
				ResultSet result = query.executeQuery(pruefen);
				while (result.next()) {
					if(result.getString("benutzername").equalsIgnoreCase(name)){
						JOptionPane.showOptionDialog(null, name+" ist bereits vorhanden", "Info",
								JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,null,null,null);

						NeuBenutzer.run();
					}else{

						String sql = "INSERT INTO login (benutzername, passwort) " +	"VALUES(?,?)";
						PreparedStatement preparedStatement = loginVerbi.prepareStatement(sql);
						preparedStatement.setString(1, name);
						preparedStatement.setString(2, passwort);

						preparedStatement.executeUpdate();

						JOptionPane.showOptionDialog(null, name+" wurde angelegt", "Info",
								JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,null,null,null);
						Menue1.run();

						//					} 
					}
				}}catch (SQLException e) {
					e.printStackTrace();
				}
		}
	}
```

Wer hat Verbesserungsvorschläge?


----------



## Joose (12. Jun 2014)

Limosan hat gesagt.:


> Ich habe folgenden Code verwendet, jedoch springt das Programm nicht aus der While schleife wenn kein Benutzer gefunden wurde..



Woran merkst du das er die while-Schleife nicht verlässt? 



Limosan hat gesagt.:


> Wer hat Verbesserungsvorschläge?



Für das INSERT verwendest du ein PreparedStatement für das SELECT aber nicht? -> SQLInjection
Entscheide dich ob du Attribute/Variablen englische oder deutsche Bezeichnungen gibst, nicht mischen.

Ein großer Nachtteil deines Codes ist die Mischung von Logik und GUI. Probiere diese Teile zu trennen (-> Schichten).


----------



## Limosan (12. Jun 2014)

Joose hat gesagt.:


> Woran merkst du das er die while-Schleife nicht verlässt?



Ok, dass war vllt. nicht richtig ausgedrückt, ich merke aber dass das else Statment nicht ausgeführt wird wenn kein Benutzer vorhanden ist..:noe:




Joose hat gesagt.:


> Für das INSERT verwendest du ein PreparedStatement für das SELECT aber nicht? -> SQLInjection


Ok, dass liegt an Copy and Paste und meiner Unwissenheit. 
Welchen Standart sollte man besser verwenden?


----------



## Joose (12. Jun 2014)

Limosan hat gesagt.:


> Ok, dass war vllt. nicht richtig ausgedrückt, ich merke aber dass das else Statment nicht ausgeführt wird wenn kein Benutzer vorhanden ist..:noe:



Warum sollte es auch ausgeführt werden? Da 
	
	
	
	





```
result.next()
```
 false liefert wird die while-Schleife gar nicht betreten.



Limosan hat gesagt.:


> Ok, dass liegt an Copy and Paste und meiner Unwissenheit.
> Welchen Standart sollte man besser verwenden?



SQLInjection bedeutet das ein SQL Statement von einem Benutzer manipuliert werden kann um weitere Informationen/Daten aus der DB zu lesen. ==> BÖSE

PreparedStatement verhindern sowas


----------

