String Vergleich mit Passwort geht nur bei Zahlen ?

  • Themenstarter Themenstarter Steffie_Coco
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
S

Steffie_Coco

Gast
Hallo,

wenn ich für ein PasswordField Zahlen eingebe klappt der Login ohne sql fehler, wenn ich aber in das PasswordField Buchstaben eingeben und die sql methode ausführe bekomme ich diesen Fehler:
Kan mir jemand sagen, warum ich Zahlen vergleichen kann mit der sql methode , aber bei buchstaben "dddddd" kommt ein fehler?


Code:
dddddd
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: [b]Unknown column 'dddddd' [/b]in 'where clause'
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
	at com.mysql.jdbc.Util.getInstance(Util.java:381)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885)
	at Database.userExist(Database.java:94)
	at Login.actionPerformed(Login.java:117)




Methodenaufruf:

Code:
char[] password    = passwordPF.getPassword();	
			 
			[b] boolean status = database.userExist(usernameTF.getText(),String.valueOf(password)); [/b]
			
			 
				if(status == true)
				{
					System.out.println("User exist in database");
					
					/*this.dispose(); 
					pupils = new PupilsGUI();*/
					
					//if(what person...)
				}


Code:
public boolean userExist(String usernameLogin , String passwordLogin)
	{
		//username:  akis   password: 1234
		//username: teacher password: 1234
	 
		System.out.println(passwordLogin);
		boolean status = false;
		try 
		{
			PreparedStatement ps = myConnection.prepareStatement("SELECT * FROM USERS where username = '"+usernameLogin+"' " + "AND password = "+passwordLogin+" "); 
			ResultSet rs = ps.executeQuery(); //Statement wird ausgeführt.
            
            if(rs.next())
            {
            	status = true;
            }	
           	
						
		}
		catch (SQLException e)
		{			
			e.printStackTrace();
		}   
		
		return status;
		
	}
 
angenommen, der User tippt als Passwort username ein

dann hast du als SQL:

SELECT * FROM USERS where username = 'gast' AND password = username

wie soll nun die DB unterscheiden, ob du einen Text username oder die Spalte username meinst?
bei 'gast' ist die Sache klarer, überleg mal warum
 
SlaterB hat gesagt.:
angenommen, der User tippt als Passwort username ein

dann hast du als SQL:

SELECT * FROM USERS where username = 'gast' AND password = username

wie soll nun die DB unterscheiden, ob du einen Text username oder die Spalte username meinst?
bei 'gast' ist die Sache klarer, überleg mal warum

HÄ ??? ich tippe weder Gast noch username ein als Password sondern es geht hier um Dinge wie "dddddddfad"

das hat nichts mit deinem Problem zu tun. Lies bitte nochmals meine Frage, danke.
 
Bei deinen Passwortvergleich fehlen die Anführungszeichen.
Daher klappt der vergleich bei Zahlen, weil sie als solche erkannt werden und das passwort aus der db
implizit in einen zahlenwert umgewandelt wird (nehme ich an)
Sind Buchstaben enthalten geht dies nicht ->wird als spaltenname interpretiert

slaterB hatte dir schonden entscheidenden Tip gegeben.
 
Code:
PreparedStatement ps = myConnection.prepareStatement("SELECT *
 FROM USERS where username = '"+usernameLogin+"'  AND password = '"+passwordLogin+"' ");

geht auch mit '' nicht...
 
ja, ganz übersehen:

Prepared Statement-Abfragen sehen so aus:

...SELECT * FROM USERS where username = ? AND password = ?");
ps.setString(1,username);
ps.setString(2,password);
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben