Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:31 Der er 46 kommentarer og
1 løsning

Teste Resultset i Servlet

Hvordan kan jeg teste om dette resultset finder noget

ResultSet rs = stmt.executeQuery("SELECT email FROM kunder WHERE email = '" + email + "'");

if(der ikke er noget i resultset skal den gøre){
en eller anden funktion

}
Avatar billede arne_v Ekspert
25. november 2004 - 21:32 #1
if(rs.next()) {
  // der var 1 eller flere rækker
} else {
  // der var 0 rækker
}
Avatar billede arne_v Ekspert
25. november 2004 - 21:33 #2
Eller hvis du absolut vil have den vendt på den anden måde:

if(!rs.next()) {
  // der var 0 rækker
}
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:33 #3
OK tak stupid mee
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:34 #4
Prøver lige
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:42 #5
Ok det virkede men har nu følgende problem den når til system.err.println("10"); liger efter den opretter arraylisten personListe

if(action.equals("BESTIL"))    {

System.err.print("Når hertil1");

int counter =0;
String name;
String lName;
String road;
String city;
String pnr;
String country;
String tlf;
String email;
String pay;

System.err.print("Når hertil2");

name = request.getParameter("NAME");
System.err.print("Når hertil3");
lName = request.getParameter("LNAME");
road = request.getParameter("ROAD");
city = request.getParameter("CITY");
pnr = request.getParameter("PNR");
country = request.getParameter("COUNTRY");
tlf = request.getParameter("TLF");
email = request.getParameter("EMAIL");
pay = request.getParameter("PAY");

System.err.print("Når hertil4");
try {

System.err.print("Når hertil5");

dbConnect dbc = new dbConnect();
Connection con = dbc.getConnection();
Statement stmt = con.createStatement();

System.err.print("Når hertil6");

ResultSet rs = stmt.executeQuery("SELECT email FROM kunder WHERE email = '" + email + "'");     


if(!rs.next()) {
rs.close();
stmt.close();
System.err.print("Når hertil7");
   
ArrayList personListe = new ArrayList();

System.err.print("Når hertil10");

ResultSet rs2 = stmt.executeQuery("INSERT INTO kunder(navn, efternavn, vej, bynavn, postnummer, land, telefon, email) VALUES ('name', 'lName', 'road', 'city', 'pnr', 'country', 'tlf', 'email')");
System.err.print("Når hertil8");
while(rs2.next()) {

personListe.add(new Person(name, lName, road, city, pnr, country, tlf, email));

}
System.err.print("Når hertil9");
rs2.close();
stmt.close();
request.setAttribute("search", "done");
request.setAttribute("personListe", personListe);

con.close();

String url="/jsp/shopping/Kvittering.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(request,response);


}

   
} catch (Exception e) {
        }

}



  }
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:43 #6
Kunne tænket der er et problem med ResultSet rs2 kan bare ikke se hvad:

ResultSet rs2 = stmt.executeQuery("INSERT INTO kunder(navn, efternavn, vej, bynavn, postnummer, land, telefon, email) VALUES ('name', 'lName', 'road', 'city', 'pnr', 'country', 'tlf', 'email')");
Avatar billede arne_v Ekspert
25. november 2004 - 21:45 #7
Du har kaldt

stmt.close();

og så kan du ikke bruge stmt igen !
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:46 #8
Jeg er vist træt
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:49 #9
Den vil stadig ikke gå viderer
Avatar billede arne_v Ekspert
25. november 2004 - 21:51 #10
Hvilken fejl får du ?
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:52 #11
Vi får ingen fejl andet end den bare kalder sig selv ShoppingServlet, grundet at den ikke når længerer end til resultset rs2. Den kommer ikke forbi resultsettet rs2
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:53 #12
Ligesom om den ikke kan indsætte personen i databasen, dog virke denne sql sætning i phpmyadmin
Avatar billede arne_v Ekspert
25. november 2004 - 21:54 #13
Prøv:

} catch (Exception e) {
  System.err.println(e);
}
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 21:57 #14
Den kan ikke indsætte data med executeQuery hvad skal man så bruge??
Avatar billede arne_v Ekspert
25. november 2004 - 21:59 #15
executeUpdate
Avatar billede arne_v Ekspert
25. november 2004 - 22:00 #16
Og den returnerer ikke et ReseultSet
Avatar billede arne_v Ekspert
25. november 2004 - 22:01 #17
men en int med antal rækker indsat/slettet/opdateret
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:05 #18
OK løste problemet, nu gider den bare ikke oprette en ny person med de data der kom ind med posten
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:15 #19
Stadi problemer med SQL forespørgslen den kan ikke få fat i de variabler som vi herved med request.getParamter.

int rs2 = stmt.executeUpdate("INSERT INTO kunder (navn, efternavn, vej, bynavn, postnummer, land, telefon, email) VALUES ('name', 'lName', 'road', 'city', 'pnr', 'country', 'tlf', 'email')");
Avatar billede arne_v Ekspert
25. november 2004 - 22:17 #20
Ikke forstået - ovenstående indsætter jo hardcoded værdier !?
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:18 #21
ja hvordan får vi den til ikke at gøre det og tage de variabler vi i forvejen har defineret eller fået fra request i formen
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:19 #22
den skal tage følgende

name = request.getParameter("NAME");
System.err.print("Når hertil3");
lName = request.getParameter("LNAME");
road = request.getParameter("ROAD");
city = request.getParameter("CITY");
pnr = request.getParameter("PNR");
country = request.getParameter("COUNTRY");
tlf = request.getParameter("TLF");
email = request.getParameter("EMAIL");
Avatar billede arne_v Ekspert
25. november 2004 - 22:22 #23
int rs2 = stmt.executeUpdate("INSERT INTO kunder (navn, efternavn, vej, bynavn, postnummer, land, telefon, email) VALUES ('" + name + "', '" + lName + "', '" + road + "', '" + city + "', '" + pnr + "', '" + country + "', '" + tlf + "', '" + email + "')");
Avatar billede arne_v Ekspert
25. november 2004 - 22:22 #24
Ved lejlighed skal du iøvrigt lige kigge PreparedStatement !!!
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:26 #25
Ja ok kan jeg godt forstå. Tak for det nu kommer koden desværre ikke længerer end lige før den skal oprette et person objekt i arrayet. Den kommer slet ikke forbi det.
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:27 #26
Her er min Person bean

package test;

public class Person {

   
String navn;
String efternavn;
String road;
String city;
String pnr;
String country;
String email;
String tlf;


public Person() {
   
    navn= "";
    efternavn= "";
    road = "";
    city = "";
    pnr = "";
    country = "";
    email = "";
    tlf = "";

  }
 
 
public Person(String navn, String efternavn, String road, String city, String pnr, String country, String tlf, String email) {
    this.navn = navn;
    this.efternavn = efternavn;
    this.road = road;
    this.city = city;
    this.pnr = pnr;
    this.country = country;
    this.email = email;
    this.tlf = tlf;

  } 
 
 
 
 
  public void setNavn(String navn) {
    this.navn = navn;
  }
  public String getNavn() {
    return navn;
  }
  public void setEfternavn(String efternavn) {
    this.efternavn = efternavn;
  }
  public String getEfternavn() {
    return efternavn;
  }
  public void setRoad(String road) {
    this.road = road;
  }
  public String getRoad() {
    return road;
  }
    public void setCity(String city) {
    this.city = city;
  }
  public String getCity() {
    return city;
  }
    public void setCountry(String country) {
    this.country = country;
  }
  public String getCountry() {
    return country;
  }
  public void setTlf(String tlf) {
    this.tlf = tlf;
  }
  public String getTlf() {
    return tlf;
  }
    public void setPnr(String pnr) {
    this.pnr = pnr;
  }
  public String getPnr() {
    return pnr;
  }
  public void setEmail(String email) {
    this.email = email;
  }
  public String getEmail() {
    return email;
  }
}
Avatar billede arne_v Ekspert
25. november 2004 - 22:38 #27
Hvordan ser koden hvor beanens constructor kaldes ud ?
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:40 #28
ej forstået?

Denne her du mener personListe.add(new Person(name, lName, road, city, pnr, country, tlf, email));
Avatar billede arne_v Ekspert
25. november 2004 - 22:45 #29
Ja, men kan vi få lidt kode før og efter
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:46 #30
ja 2 sek.

System.err.print("Når hertil10");

int rs2 = stmt.executeUpdate("INSERT INTO kunder (navn, efternavn, vej, bynavn, postnummer, land, telefon, email) VALUES ('" + name + "', '" + lName + "', '" + road + "', '" + city + "', '" + pnr + "', '" + country + "', '" + tlf + "', '" + email + "')");
System.err.print("Når hertil8");

System.err.println(name);
ArrayList per = new ArrayList();

Person person = new Person(name, lName, road, city, pnr, country, tlf, email);

System.err.println(person);

per.add(person);


System.err.print("Når hertil9");


stmt.close();
request.setAttribute("search", "done");
request.setAttribute("per", per);

con.close();

String url="/jsp/shopping/Kvittering.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(request,response);


}

   
} catch (Exception e) {
  System.err.println(e);
}

}
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:47 #31
Kan ikke oprette person af en eller anden årsag.
Avatar billede arne_v Ekspert
25. november 2004 - 22:50 #32
Og den skriver:

"Når hertil8"

men ikke:

person

eller

"Når hertil9"
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:56 #33
Det var Jcreator der ikke compilerede rigtigt, nu har vi kun et sidste problem.

Den vil ikke forwarde et response til Kvittering.jsp

Den skriver Cannot forward after response have been comitted Det er en java.lang IllegalState Exception
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 22:57 #34
stmt.close();
request.setAttribute("search", "done");
request.setAttribute("per", per);

con.close();

String url="/jsp/shopping/Kvittering.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(request, response);


}

   
} catch (Exception e) {
  System.err.println(e);
}

}



  }
Avatar billede arne_v Ekspert
25. november 2004 - 22:59 #35
Det plejer at betyder at servletten har lavet noget output inden den forsøger
at forwarde.

Og det kan man ikke !
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 23:01 #36
ok hvordan kan vi så sende det vi er noget frem til, atså personen i arrayet
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 23:03 #37
Skal jeg smide den nye funktion over i sin egen servlet.
Avatar billede arne_v Ekspert
25. november 2004 - 23:04 #38
Det er ikke request.setAttribute som laver ulykker !

Kalder du response.getWriter() eller response.getOutputStream()
eller response.setContentType("...") ?
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 23:04 #39
Smutter i seng men skriv hvis du finder en løsning. :)
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 23:05 #40
Nej
Avatar billede arne_v Ekspert
25. november 2004 - 23:10 #41
Et eller andet må der være.

Jeg skal nok se hele koden for at komme videre.
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 23:32 #42
ja jeg sender den til din mail ok kl 24.30 såkan du kigge på det, det eneste jeg ønsker at ved Checkout intaster man sine data og herefter vidre sendes man til Kvittering.jsp.
Avatar billede noerdar-dilling Nybegynder
25. november 2004 - 23:49 #43
Inden jeg sender koden Viser jeg lige hvordan flowet for siden er fra hvor man har en bog.

Man trykket tilføj. dette bliver registreret i ShoppingServlet med action add. Herefter returneres man til cart.jsp af ShoppingServlet. I cart.jsp kan man så trykke på Checkout, hvor man herefter returneres til checkout.jsp Nu skal man så indtaste sine oplsninger og trykke bestil, der sender action=BESTIL til ShoppingServletten. HErtil skal der returneres til Kvittering.jsp, men dette sker ikke.
Avatar billede noerdar-dilling Nybegynder
26. november 2004 - 02:05 #44
Problemet er at når jeg sender action BESTIL reloader shoppingServlet bare sig selv med indholdet af cart.jsp , men jeg vil have den til at gå til Kvittering.jsp istedet her er koden for min shoppingServlet. Har sendt alt den anden kode til sig Arne på din mail.

Lig mærke til næsten i bunden hvor funktion if(action=BESTIL), det er når den er færdig med denne eksikvering at den skal hoppe til Kvittering.jsp

-------------------------------------------------------------------------------

import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import test.dbConnect;
import java.net.*;
import java.sql.*;
import test.Book;
import java.util.ArrayList;
import test.showKvit;




public class ShoppingServlet extends HttpServlet {
  public void init(ServletConfig conf) throws ServletException  {
    super.init(conf);
  }


public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(false);
 
if (session == null) {
      response.sendRedirect("http://localhost:8080/minApp/error.html");
    }
 
 
Vector buylist = (Vector)session.getValue("test.shoppingcart");
    String action = request.getParameter("action");
 
if (!action.equals("CHECKOUT")) {

if (action.equals("DELETE")) {
     
    String del = request.getParameter("delindex");
      int d = (new Integer(del)).intValue();
      buylist.removeElementAt(d);
     

} else if (action.equals("ADD")) {
 
        //any previous buys of same book?
     
        boolean match=false;

        Book aBook = getBook(request);
     
        if (buylist==null) {
         
          //add first book to the cart
       
          buylist = new Vector(1000); //first order
       
          buylist.add(aBook);
       
        } else { // not first buy
     
        System.err.println("buylist=" + buylist);
          for (int i=0; i< buylist.size(); i++) {
            Book book = (Book) buylist.elementAt(i);

            if (book.getIsbn().equals(aBook.getIsbn())) {
              book.setAntal(book.getAntal()+aBook.getAntal());
              buylist.setElementAt(book,i);
              match = true;
            } //end of if name matches
          } // end of for
          if (!match)
            buylist.addElement(aBook);
        }
      }
      session.putValue("test.shoppingcart", buylist);
      String url="/jsp/shopping/showBookSpec.jsp";
      ServletContext sc = getServletContext();
      RequestDispatcher rd = sc.getRequestDispatcher(url);
      rd.forward(request, response);
   
    } else if (action.equals("CHECKOUT"))  {
      float total =0;
      for (int i=0; i< buylist.size();i++) {
        Book anOrder = (Book) buylist.elementAt(i);
        float pris= anOrder.getPris();
        int antal = anOrder.getAntal();
        total += (pris * antal);
      }
      total += 0.005;
      String amount = new Float(total).toString();
      int n = amount.indexOf('.');
      amount = amount.substring(0,n+3);
      request.setAttribute("amount",amount);
      String url="/jsp/shopping/Checkout.jsp";
      ServletContext sc = getServletContext();
      RequestDispatcher rd = sc.getRequestDispatcher(url);
      rd.forward(request,response);




if(action.equals("BESTIL"))    {



int counter =0;
String name;
String lName;
String road;
String city;
String pnr;
String country;
String tlf;
String email;
String pay;

name = request.getParameter("NAME");
lName = request.getParameter("LNAME");
road = request.getParameter("ROAD");
city = request.getParameter("CITY");
pnr = request.getParameter("PNR");
country = request.getParameter("COUNTRY");
tlf = request.getParameter("TLF");
email = request.getParameter("EMAIL");
pay = request.getParameter("PAY");

try {

dbConnect dbc = new dbConnect();
Connection con = dbc.getConnection();
Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT email FROM kunder WHERE email = '" + email + "'");     

if(!rs.next()) {
rs.close();

int rs2 = stmt.executeUpdate("INSERT INTO kunder (navn, efternavn, vej, bynavn, postnummer, land, telefon, email) VALUES ('" + name + "', '" + lName + "', '" + road + "', '" + city + "', '" + pnr + "', '" + country + "', '" + tlf + "', '" + email + "')");

ArrayList per = new ArrayList();

person aperson = new person(name, lName, road, city, pnr, country, tlf, email);

System.err.println(aperson);

per.add(aperson);

stmt.close();

con.close();

   
}

   
} catch (Exception e) {
  System.err.println(e);
}

}



  }

private Book getBook(HttpServletRequest request) {

try { 

dbConnect dbc = new dbConnect();
Connection con = dbc.getConnection();
Statement stmt = con.createStatement();


    String myBook = request.getParameter("book");
    String antal = request.getParameter("antal");

ResultSet rs = stmt.executeQuery("SELECT isbn, forfatter, titel, pris FROM boeger WHERE isbn = '" + myBook + "'");
 
    rs.next();
 
    Book book = new Book();
    book.setForfatter(rs.getString(2));
    book.setTitel(rs.getString(3));
    book.setIsbn(rs.getString(1));
    book.setPris((new Float(rs.getFloat(4))).floatValue());
    book.setAntal((new Integer(antal)).intValue());


 
    rs.close();
 
    stmt.close();   


    return book;

} catch (Exception e) {
    System.err.println(e);
    return null;

  }



    }

}

-----------------------------------------------------------------
Avatar billede noerdar-dilling Nybegynder
26. november 2004 - 11:43 #45
Har ordnet det send et svar
Avatar billede arne_v Ekspert
26. november 2004 - 13:21 #46
svar
Avatar billede arne_v Ekspert
12. december 2004 - 19:43 #47
så mangler du bare at acceptere svaret
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester