jsp: insert eines Strings in Oracle-DB ohne Leer

Von: , 10.08.2011 10:53 Uhr


Hallo zusammen, ich habe unten gezeigten jsp-Code, der auch in die Oracle-DB einfügt, jedoch wird bei der Eingabe von z.B. test im Feld ename immer ein Leerzeichen for dem Wort test in die DB geschrieben (ename ist vom Typ String), wie kann ich dass vermeiden?
Vielen Dank.
m_lyxs

CODE:

<HTML>
<HEAD><TITLE>DB Zugriff mittels JSP</TITLE></HEAD>
<BODY>

<H2>Einfügen in der Tabelle emp</H2>
<FORM ACTION = "db_zugriff_jdbc_insert.jsp" METHODE = "POST">
empno: <INPUT TYPE = TEXT NAME = firstln><BR>
ename: <INPUT TYPE = TEXT NAME = lastln><BR>
<INPUT TYPE = Submit VALUE = "Der Tabelle emp hinzufügen">
</FORM>
<HR>

<H2>Inhalt der Tabelle emp</H2>
<TABLE BORDER=1 CELLPADDING=0 CELLSPACING=0>
<TH>empno</TH><TH>ename</TH><TH>job</TH>
<%
Class.forName("oracle.jdbc.driver.OracleDriver");
java.sql.Connection con = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@10.0.0.98:1521:abc_db", "scott", "tiger");
java.sql.Statement stmt = con.createStatement();

java.util.Enumeration parameters = request.getParameterNames();
if (parameters.hasMoreElements()) {
String firstParam = request.getParameter("firstln");
String lastParam = request.getParameter("lastln");
stmt.executeUpdate ("INSERT INTO emp (\"EMPNO\",\"ENAME\") VALUES (' "+firstParam+" ',' "+lastParam+" ')");
}

java.sql.ResultSet rs = stmt.executeQuery("SELECT empno, ename, job FROM emp");
while(rs.next()) {
String empno = rs.getString("empno");
String ename = rs.getString("ename");
String job = rs.getString("job");
%>
<TR>
<TD><%= empno %></TD>
<TD><%= ename %></TD>
<TD><%= job %></TD>
</TR>
<%
}
rs.close();
stmt.close();
con.close();
%>
</TABLE>
</BODY>
</HTML>

6 Antworten zu dieser Frage

  1. Antwort von nach 38 Minuten 0 hilfreich
    Re: jsp: insert eines Strings in Oracle-DB ohne Leer

    Hallo,
    das Leerzeichen hast du in deinem Insert-Statement selbst eingebaut:

    stmt.executeUpdate ("INSERT INTO emp (\"EMPNO\",\"ENAME\") VALUES (' "+firstParam+" ',' "+lastParam+" ')");

    Zwischen den einfachen und den doppelten Anführungszeichen (' und ") ist jeweils ein Leerzeichen.
    Wenn du die entfernst sollte es gehen.

    Die Zeile muss somit folgendermaßen aussehen:

    stmt.executeUpdate ("INSERT INTO emp (\"EMPNO\",\"ENAME\") VALUES ('"+firstParam+"','"+lastParam+"')");



    Grüße
    Wolf G. Beckmann

    Hallo zusammen, ich habe unten gezeigten jsp-Code, der auch in
    die Oracle-DB einfügt, jedoch wird bei der Eingabe von z.B.
    test im Feld ename immer ein Leerzeichen for dem Wort test in
    die DB geschrieben (ename ist vom Typ String), wie kann ich
    dass vermeiden?
    Vielen Dank.
    m_lyxs

    CODE:

    ...

    stmt.executeUpdate ("INSERT INTO emp (\"EMPNO\",\"ENAME\")
    VALUES (' "+firstParam+" ',' "+lastParam+" ')");
    }

    ...

  2. Antwort von nach 51 Minuten 0 hilfreich
    Re: jsp: insert eines Strings in Oracle-DB ohne Leer

    Hallo m_lyxs,


    einfacher Workaround: ltrim(value)
    Bsp: ltrim(" test") ergibt "test"

    trim schneidet in Oracle Leerzeichen weg,
    ltrim von links, rtrim von rechts ...

    Gruß,
    Markus

  3. Antwort von nach 5 Stunden 0 hilfreich
    Re: jsp: insert eines Strings in Oracle-DB ohne Leer

    Hallo,

    versuchen Sie es bitte einmal mit der Funktion trim().

    Also etwa so: String ename = rs.getString("ename").trim();

    Ich hoffe das löst das Problem?

    Viele Grüße
    Sven

  4. Antwort von nach 6 Stunden 0 hilfreich
    Re: jsp: insert eines Strings in Oracle-DB ohne Leer

    Hallo m_lyxs,

    ich bin vermutlich nicht der Erste, der die das antwortet, aber im SQL-Statement fügst du die Leerstelle doch direkt vor dem Wert explizit ein:

    VALUES (' "+firstParam+" '
    in
    VALUES ('"+firstParam+"'

    ändern und alles wird gut.

    Gruß
    Stefan

  5. Antwort von nach 21 Stunden 0 hilfreich
    Re: jsp: insert eines Strings in Oracle-DB ohne Leer

    Sorry, aber da bin ich die falsche Person. jsp-code sagt mir nichts.
    gruß

  6. Antwort von nach 83 Tagen 0 hilfreich
    Re: jsp: insert eines Strings in Oracle-DB ohne Leer

    Die Leerzeichen setzt du selbst zwischen dem ' und dem " bzw umgekehrt. stmt.executeUpdate ("INSERT INTO emp (\"EMPNO\",\"ENAME\")
    VALUES (' "+firstParam+" ',' "+lastParam+" ')");
    Dynamische SQL ist nie einfach.
    Ich schreibe mir das generierte Statement (fast) immer in eine Variable, damit ich mir beim debuggen das Ergebnis ansehen und evtl. mit cut und paste im SQL-Developer ausführen kann.
    Das Einsetzen von Variablen so wie du es machst öffnet auch tür und Tor für eine sql-injection oder aber lässt es einfach knallen, wenn bei der Eingabe im Namen ein ' vorkommt.
    Oracle bietet die Möglichkeit ein Statement mit Variablen parsen (vorkompilieren) zu lassen und es danach (auch mehrfach) mit übergebenen Variablen auszuführen. (die Syntax dafür müsste ic haber auch erst nachschlagen.

Jetzt auf diese Frage antworten.