2016-12-18 4 views
0

Ich möchte eine Person mit Namen und Passwort zur Datenbank mit einem Register-Button auf reg.html hinzufügen. Benutzer füllen Benutzernamen und Passwort und dann drücken Sie die Schaltfläche "Registrieren" und Informationen werden zur Datenbank hinzugefügt. Aber mein Code funktioniert nicht richtig.hinzufügen nicht zur Datenbank in Java Jsp

public void addPerson(String username, String password) { 
    if (con == null) { 
     System.out.println("no connection"); 
     connect(); 
    } 
    try { 
     Statement state = con.createStatement(); 
     ResultSet rs = state.executeQuery("INSERT INTO users VALUES ('" +  username + "', '" + password + "'"); 
     rs.next(); 

    } catch (Exception e) { 
     e.printStackTrace(); 

    } 

} 

Dies ist der reg.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>JSP Page</title> 
</head> 
<body> 
<h1>Hello World!</h1> 
<jsp:useBean id="bean1" scope="session" class="veri.kisi" /> 
<jsp:setProperty name="bean1" property="username"/>  
<jsp:setProperty name="bean1" property="password" /> 

</body> 
</html> 

diesem Zusammenhang die kisi.java ist

public void insertPerson() { 
    DatabaseLayer layer = new DatabaseLayer(); 
    layer.addPerson(username, password); 
} 
+1

'INSERT' ist keine * Query *. Überprüfe deine Log-Dateien, weil du einen Stacktrace hast, der dir das sagt. – Andreas

+1

** Verwenden Sie ** nicht ** String-Verkettung, um eine SQL-Anweisung mit benutzerdefinierten Strings zu erstellen. Siehe [SQL-Injektion] (https://en.wikipedia.org/wiki/SQL_injection). – Andreas

+1

Und ** nicht ** Benutzer Passwörter im Klartext speichern. Das ist * grob unverantwortlich * für Ihre Benutzer. Verschlüsseln Sie die Kennwörter hinter einem 1-Wege-Hash, damit auch Sie als Systembesitzer sie nicht lesen oder wiederherstellen können. – David

Antwort

0

Bitte nehmen Sie zur Kenntnis, die obigen Kommentare von anderen gegeben, sie nachweisen können, werden wichtig, um Ihren Code gesichert zu machen, während Sie Daten aus Online-Quellen in die Datenbank einfügen.

public void addPerson(String username, String password) { 
if (con == null) { 
    System.out.println("no connection"); 
    connect(); 
} 
try { 
    Statement state = con.createStatement(); 
    state.execute("INSERT INTO users VALUES ('" +  username + "', '" + password + "'"); 


} catch (Exception e) { 
    e.printStackTrace(); 

} 

} 

Das ResultSet-Objekt wird verwendet, über die Zeilen von Tabellen in der Datenbank zu durchlaufen, keine Abfragen in der Datenbank einzufügen.

+0

rs.nex() gab einen Fehler aus. Ich habe es gelöscht. Danach renne ich und es funktioniert immer noch nicht – tripley

+0

@burak nurçiçek Entschuldigung für meinen Fehler zu verlassen rs.next(), es war nur ein Tippfehler von mir, können Sie mir sagen, warum es nicht funktioniert, so dass ich kann Versuch es zu reparieren? –

0

Bevor Sie irgendwelche updaes machen, würde ich vorschlagen, dass Sie con.autocommit auf false setzen. Dann verwenden Sie state.executeUpdate(); Es wird ein Int-Typ zurückgegeben. Überprüfen Sie, ob int> 0 ist, und führen Sie dann nur einen Commit-Job durch, indem Sie con.commit() aufrufen.

0

Keine Notwendigkeit zu verwenden ResultSet seit Insert ist keine Abfrage. Dazu können Sie PreparedStatement verwenden. Ersetzen Sie try Blockcode durch die folgenden Zeilen.

PreparedStatement ps = con.prepareStatement("insert into users values (?,?)"); 
ps.setString(1, username); 
ps.setString(2, password); 
ps.execute();