Hallo Community,
ich habe folgendes Problem: Ich habe eine MSAccess-Datenbank mit einer Tabelle BPw, die fiktive Benutzernamen und Passwörter enthält. Beides habe ich mit einer einfachen Caesar-Verschiebung codiert. In folgendem Text sind benutzername und passwort die zu überprüfenden Werte, die Methode gibt true zurück, wenn das Passwort stimmt:
Wenn ich jeweils die En-/Decrypt Anweisungen lösche und den codierten Namen/Passwort prüfe, funktioniert das Programm. Mit dem (de)codieren jedoch, kommt folgende Fehlermeldung (aeoio ist das codierte Wort):
Der Fehler tritt bei
auf.
Die Methode Encrypt sieht so aus:
, Decrypt genauso.
Durch ein bisschen herumprobieren habe ich herausgefunden, dass bei
die SQL-Abfrage vor dem letzten Hochkomma beendet wird. Wegen dem "fehlenden" Hochkomma gibt es deswegen einen Syntaxfehler. Auch das maskieren mit \' hilft nichts.
Hat jemand eine Idee hierzu?
ich habe folgendes Problem: Ich habe eine MSAccess-Datenbank mit einer Tabelle BPw, die fiktive Benutzernamen und Passwörter enthält. Beides habe ich mit einer einfachen Caesar-Verschiebung codiert. In folgendem Text sind benutzername und passwort die zu überprüfenden Werte, die Methode gibt true zurück, wenn das Passwort stimmt:
Java:
private boolean checkPw(){
String neupsw="";
boolean psw=false;
String query = "SELECT * FROM BPw WHERE Fld1 = '" + Code.Encrypt(benutzername) +"'";
System.out.println(query);
ResultSet rs=null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String accessFileName = "C:/Database";
String connURL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+accessFileName+".accdb;";
Connection con = DriverManager.getConnection(connURL, "","");
Statement stmt = con.createStatement();
stmt.execute(query);
rs = stmt.getResultSet();
if (rs != null) {
rs.next();
neupsw=Code.Decrypt(rs.getString("Fld2"));
if(passwort.equals(neupsw)) psw=true; else psw=false;
}
stmt.close();
con.close();
}catch(Exception e){e.printStackTrace();}
return psw;
}
Wenn ich jeweils die En-/Decrypt Anweisungen lösche und den codierten Namen/Passwort prüfe, funktioniert das Programm. Mit dem (de)codieren jedoch, kommt folgende Fehlermeldung (aeoio ist das codierte Wort):
Java:
java.sql.SQLException: [Microsoft][ODBC-Treiber für Microsoft Access] Syntaxfehler in Zeichenfolge in Abfrageausdruck 'Fld1 = 'aeoio'.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
at communicator.LogIn.checkPw(LogIn.java:107)
at communicator.LogIn.check(LogIn.java:84)
at communicator.LogIn.keyPressed(LogIn.java:134)
at java.awt.Component.processKeyEvent(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
//und so weiter...
Der Fehler tritt bei
Code:
stmt.execute(query);
Die Methode Encrypt sieht so aus:
Code:
public static String Encrypt(String s)
Durch ein bisschen herumprobieren habe ich herausgefunden, dass bei
SQL:
SELECT * FROM BPw WHERE Fld1 = 'aeoio'
Hat jemand eine Idee hierzu?
Zuletzt bearbeitet: