2 Stimmen

Einfügen von Variablen mit SQL in Java

Ich schreibe eine Webseite, die Eingaben über ein Formular entgegennimmt, sie durch cgi an eine Java-Datei sendet, die Eingabe über SQL in eine Datenbank einfügt und dann die Datenbank ausgibt. Ich habe jedoch Schwierigkeiten, Variablen in die Datenbank einzufügen, und ich frage mich, ob mir jemand helfen könnte.

String a1Insert = (String)form.get("a1");
 String a2Insert = (String)form.get("a2");

Hier beziehe ich meine Variablen aus dem Formular (glauben Sie einfach, dass es funktioniert, es gibt eine Menge Backend, aber ich habe dies bereits verwendet und weiß, dass die Variablen richtig abgerufen werden).

 String dbURL = "jdbc:derby://blah.blahblah.ca:CSE2014;user=blah;password=blarg";
  Connection conn = DriverManager.getConnection(dbURL);
  Statement stmt = conn.createStatement();
  stmt.executeUpdate("set schema course");
 stmt.executeUpdate("INSERT INTO MEMBER VALUES (a1Insert, a2Insert)"); 
 stmt.close();

Hier versuche ich, in die Datenbank einzufügen. Es gibt mir den Fehler:

Column 'A1INSERT' ist entweder in keiner Tabelle in der FROM-Liste oder erscheint innerhalb einer JOIN-Spezifikation und liegt außerhalb des Gültigkeitsbereichs der JOIN-Spezifikation oder erscheint in einer HAVING-Klausel und ist nicht in der GROUP BY-Liste enthalten. Wenn dies ein CREATE- oder ALTER-TABLE-Statement ist, ist 'A1INSERT' keine Spalte in der Ziel-Tabelle.

Wenn jemand Ideen hat, wäre das schön ^.^ Danke

6voto

Nathan Hughes Punkte 90344

java.sql.Statement unterstützt keine Parameter, daher sollte auf java.sql.PreparedStatement umgestiegen werden, um Parameter festzulegen. Ersetzen Sie die Parameter-Namen in Ihrem SQL durch ? und rufen Sie die Setter-Methoden auf dem vorbereiteten Statement auf, um jedem Parameter einen Wert zuzuweisen. Das wird ungefähr so aussehen

String sql = "INSERT INTO MEMBER VALUES (?, ?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, "a1");
stmt.setString(2, "a2");
stmt.executeUpdate();

Dadurch wird das SQL ausgeführt

INSERT INTO MEMBER VALUES ('a1', 'a2')

Beachten Sie, dass die Parameterindizes bei 1, nicht bei 0 starten. Beachten Sie auch, dass ich nicht die Anführungszeichen um die Strings setzen musste, das hat das PreparedStatement für mich erledigt.

Alternativ könnten Sie weiterhin Statement verwenden und Ihren SQL-String im Java-Code erstellen, aber das birgt die Möglichkeit von SQL-Injections-Angriffen. Die Verwendung von PreparedStatement zur Festlegung von Parametern vermeidet dieses Problem, indem sie sich um die Behandlung von Anführungszeichen kümmert; findet es ein Anführungszeichen im Parameterwert, wird es es escapen, sodass es die SQL-Anweisung, in der es enthalten ist, nicht beeinträchtigt.

Oracle hat hier ein Tutorial.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X