Announcement

Collapse
No announcement yet.

preparedStatement - wie setString anpassen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • preparedStatement - wie setString anpassen?

    Hallo,
    ich bin grade dabei mich mit Java und Datenbanken zu befassen, da ich meine Datenbank vor SQL Injections sicher machen möchte, habe ich hierzu das perparedStatement gefunden. Kling für mich auch alles ganz logisch nur habe ich ein Problem mit der Methode setString.
    Ich muss ja in der setString Methode die Variablen angeben die ich im SQL Statement posten will, muss ich dann also pstmt.setString(1, pnr, 2, anrede); eingeben, weil da wird mir in eclipse immer ein Fehler angezeigt?
    Besten Dank schon mal für Antworten

    Code:
    			conn  =  DriverManager.getConnection(connectionURL);
    			PreparedStatement pstmt = conn.prepareStatement("INSERT INTO `projekt`.`mitarbeiter` (`PNr`, `Anrede`, `Titel`, `Nachname`, `Vorname`, `Geb_Datum`, `Geb_Ort`, `Str_HNr`, `Wohnort`, `PLZ`, `Telefon`, `Eintrittsdatum`, `Zeit_Karten_Nr`, `Tank_Karten_Nr`, `Arbeitskleidung`, `Durchwahl`, `Fax`) " +
    					"VALUES(" + pnr + ", '" + anrede +"', '" + titel + "', '"+ nachname +"', '"+ vorname +"', '"+ geb_datum +"', '"+ geb_ort +"', '"+ str_hnr +"', '"+ wohnort +"', "+ plz +", '"+ telefon +"', '"+ eintrittsdatum +"', '"+ zeit_karten_nr+"', '"+ tank_karten_nr +"', "+ arbeitskleidung +", '"+ durchwahl +"', '"+ fax +"');");
    			conn.setAutoCommit(false);
    			pstmt.setString(1, pnr);
    			pstmt.executeQuery();
    			PreparedStatement pstmt1 = conn.prepareStatement("INSERT INTO `projekt`.`arbeitet_in` (`F_PNr`, `F_Kst`) "+
    					"VALUES(" + pnr + ", " + abteilung + ");");
    			pstmt1.executeQuery();

  • #2
    http://download.oracle.com/javase/tu.../prepared.html

    Je Parameter einmal setString....
    Christian

    Comment


    • #3
      Ok, danke schon mal
      Habe es jetzt so abgeändert:
      Code:
      "VALUES('?'+","+ '?'+ '?', '"+ nachname +"', '"+ vorname +"', '"+ geb_datum +"', '"+ geb_ort +"', '"+ str_hnr +"', '"+ wohnort +"', "+ plz +", '"+ telefon +"', '"+ eintrittsdatum +"', '"+ zeit_karten_nr+"', '"+ tank_karten_nr +"', "+ arbeitskleidung +", '"+ durchwahl +"', '"+ fax +"');");
      			conn.setAutoCommit(false);
      			pstmt.setString(1, pnr);
      			pstmt.setString(2, anrede);
      			pstmt.setString(3, titel);
      			pstmt.executeQuery();
      Wie läuft das denn mit dem Komma, das ich ja für die Abfrage setzen muss?
      Möchte ja z.B. Values(14, Herr, Dr,...) eingeben?
      Weil wenn ich +","+ im Quelltext angebe wird mit gesagt The method prepareStatement(String, Int) in the Connection is not applicable for the arguments String, String ?

      Oder muss ich es so machen?
      pstmt.setString(1, pnr+","+anrede); und dann nur ein Fragezeichen?

      Comment


      • #4
        Der zweite Parameter ist ein String

        Also wohl

        pstmt.setString(1, pnr+","+anrede);
        Christian

        Comment


        • #5
          Dein SQL muss bei einem PrepStatement wie folgt aussehen:

          Code:
          String sql="INSERT INTO tabelle (spalte1,spalte2,spalte3,...) VALUES(?,?,?,...)";
          Fertig.

          Jetzt für jeden Deiner Parameter ein set<Datentyp> mit dem entsprechenden Index aufrufen.

          Du brauchst da keine Hochkommata etc. mehr setzen.

          Dim
          Zitat Tom Kyte:
          I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

          Comment


          • #6
            Ah ok, alsö wäre es so richtig, oder?
            PreparedStatement pstmt = conn.prepareStatement("INSERT INTO projekt.mitarbeiter (PNr, Anrede, Titel, Nachname, Vorname, Geb_Datum, Geb_Ort, Str_HNr, Wohnort, PLZ, Telefon, Eintrittsdatum, Zeit_Karten_Nr, Tank_Karten_Nr, Arbeitskleidung, Durchwahl, Fax) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            pstmt.setString(1,pnr + ", '" + anrede +"', '" + titel + "', '"+ nachname +"', '"+ vorname +"', '"+ geb_datum +"', '"+ geb_ort +"', '"+ str_hnr +"', '"+ wohnort +"', "+ plz +", '"+ telefon +"', '"+ eintrittsdatum +"', '"+ zeit_karten_nr+"', '"+ tank_karten_nr +"', "+ arbeitskleidung +", '"+ durchwahl +"', '"+ fax );
            oder muss ich im SetString das
            +"', '"+
            noch weg lassen und direkt die parameter aufrufen?

            Danke schon mal für die Antwort :-)

            Comment


            • #7
              je ? ein setString
              Christian

              Comment


              • #8
                Genau. Also
                Code:
                pstmt.setString(1,pnr);
                pstmt.setString(2,anrede);
                ...
                Beachte auch, dass falls in der Datenbank keine String sondern nummerische oder Datumsfelder enthalten sind Du die entsprechenden setXXX Methoden verwenden musst.

                Dim
                Zitat Tom Kyte:
                I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

                Comment

                Working...
                X