30. april 2003 - 13:34Der er
23 kommentarer og 1 løsning
Løb form felter igennem, på submit side
Hej,
Jeg er igang med at oversætte en ASP applikation til en JSP applikation. Dog er jeg ret ny til JSP, og det er her I kommer ind i billedet. Håber I kan hjælpe mig:
Jeg har følgende ASP kode, som jeg kunne tænke mig oversat til JSP. Jeg behøver nødvendigvis ikke den endelige kode, blot en ide til hvordan jeg kan komme igang vil være rar.
'** Run through items in submitted form **' For Each Itm In Request.Form colums = colums & itm & ", " For i = 1 to Request.Form(itm).Count If IsNumeric(Request.Form(itm)(i)) Then input = input & Request.Form(itm)(i) & ", " Else input = input & "'" & Replace(Request.Form(itm)(i), "'", "chr(39)") & "', " End If Next Next
'** Build and execute SQL **' If colums <> "" Then SQL = "INSERT INTO kundeunder ("&Left(colums, Len(colums)-2)&") VALUES("&Left(input, Len(input)-2)&");" conn.execute(SQL) End If
Det skal måske lige siges, at det der volder min hjerne problemer er hovedsagligt For Each Itm... delen. Den har jeg inden ide om hvordan man laver i JSP
Jeg får denne fejl: Method getParameterMap() not found in interface javax.servlet.http.HttpServletRequest. Map m = request.getParameterMap(); Jeg har importet <%@ page import="javax.servlet.http.HttpServletRequest" %>.
Får stadig fejlen: org.apache.jasper.JasperException: Unable to compile class for JSPE:\WebSphere\AppServer\temp\hd app serverWebApp\BU\_test_5F_submit_jsp_0.java:95: Method getParameterMap() not found in interface javax.servlet.http.HttpServletRequest. Map m = request.getParameterMap(); ^
Det ser ud til at spille max. Er det okey jeg venter med at lukke spørgsmålet og ive dig pointne til imorgen? (Vil gerne have det med SQL sætningen til at virke også, og går snart hjem)
Min kode ser nu sådan her ud: <%@ page import="java.util.*" %>
<% int tmp = 0; String value = ""; String field = ""; String sql = "";
Enumeration e = request.getParameterNames(); while(e.hasMoreElements()) { String paramname = (String)e.nextElement(); String paramvalue = (String)request.getParameter(paramname); if (!paramvalue.equalsIgnoreCase("")) { field += paramname + ","; try { tmp = Integer.parseInt(paramvalue); value += paramvalue + ","; } catch (NumberFormatException nfe) { value += "'" + whd.Utilities.toHTMLString(paramvalue) + "',"; } } } if (field.length() > 1) { field = field.substring(0, field.length()-1); value = value.substring(0, value.length()-1); sql = "INSERT INTO kundeunder (" + field + ") VALUES(" + value + ")"; } %><%=sql%>
Du er velkommen til a kommenterer, hvis der er noget "grim" kode.
Jeg har en SQLutil classe, som jeg før har brugt til at eksekverer SQL med. Dog er denne noget stor i forhold til hvad man eksemple behøver at bruge i ASP. Ved godt det lyder lidt ladt, men er der en nem måde at eksekverer min sql variable imod min database?
Igen tak forhjælpen, du behøves selvfølig ikke nødvendigvis at svare på dette tillægsspørgsmål for at du får dine point :-)
Statement stmt = conn.createStatement(); stmt.executeUpdate("INSERT INTO T (F1, F2) VALUES (1, 'A')); stmt.executeUpdate("INSERT INTO T (F1, F2) VALUES (2, 'BB'));
og det har naturligvis et problem med ' i tekster.
Prepared statement er:
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO T (F1, F2) VALUES (?, ?)); pstmt.setInt(1, 1); pstmt.setString(2,"a"); pstmt.execxuteUpdate(); pstmt.setInt(1, 2); pstmt.setString(2,"bb"); pstmt.execxuteUpdate();
og der har ihvertfald 2 fordele:
1) lille smule bedre performance fordi SQL strengen kun skal parses en gang
Jeg tænkte bare på at hvsi databasen havde felter: F1 - integer F2 - varchar(50) men den blev kaldt med værdierne A og 1, så ville koden faktisk generere: INSERT INTO T (F1, F2) VALUES('A', 1); hvilket vil give fejl i executeUpdate.
Helt principielt bør tal/tekst jo afhænge af typerne i databasen ikke af de angive værdier.
Mest en pricipiel betragtning. Formentligt ikke det store praktiske problem.
Og det er ikke noget nyt i JSP udgaven - præcis det samme må gælde i ASP udgaven.
Kan godt se problemet med at jeg forvnter at tal/tekst værdierne er "på plads". Går ud fra jeg burde lave noget check på dette!
Jeg kan også godt se pointen med preparedstatements. Og jeg vil nok også selv vælger den løsning. I tilfældet her er der i forvejen lavet en masse klasser som jeg kan bruge, og det smarteste vil nok være at forsætte med at bruge de klasser.
1000 tak for alt hjælpen. Jeg mener at have løst alleudfordringerne for denne gang.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.