Problem z pobraniem danych z bd.

0

Witam ma przerobić skrypt aby korzystał z bazy danych już kilka dni straciłem na na to wiec w końcu proszę was o pomoc podpowiedzcie co źle robię.

Moja dotychczasowa błędna przeróbka(bazę i poleczenia już stworzyłem):

package coreservlets;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Catalog {

    public Item[] items() {
        Connection conn = null;
        try {
            conn = ConnectionHelper.getConnection();
            Statement st = conn.createStatement();
            String query = "SELECT * FROM books";
            ResultSet rs = st.executeQuery(query);
            if (!rs.next())
                return null;
            Item[] items = new Item[rs.getRow()];
            for (int i = 0; rs.next(); i++) {
                String v1 = rs.getString(1);
                String v2 = rs.getString(2);
                String v3 = rs.getString(3);
                Double v4 = rs.getDouble(4);
                items[i] = new Item(v1, v2, v3, v4);
            }
            return items;
            ConnectionHelper.close(conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Item getItem(String itemID) {
        Item items;
        if (itemID == null) {
            return (null);
        }
        for (int i = 0; i < items.length; i++) {
        item = items[i];
        if (itemID.equals(item.getItemID())) {
        return (item);
        }
        }
        return (null);
    }
}

oryginalny:

package coreservlets;

public class Catalog {
    // Normalnie te informacje byłyby przechowywane i pobierane
    // z bazy danych.
    private static Item[] items = {
            new Item(
                    "hall001",
                    "<I>Java Servlets i JavaServer Pages</I> "
                            + " autor Marty Hall",
                    "Doskonała pozycja wydawnictwa HELION poświęcona "
                            + "serwletom i JSP.\n"
                            + "Nominowana do nagrody Nobla w dziedzinie literatury.",
                    39.95),
            new Item(
                    "hall002",
                    "<I>Core Web Programming, Java2 Edition</I> "
                            + " autorzy: Marty Hall, Larry Brown oraz "
                            + "Paul McNamee",
                    "Wspaniała książka dla programistów aplikacji "
                            + "internetowych. Omawiane w niej zagadnienia obejmują \n"
                            + "<UL><LI>dokładną prezentację platformy Java 2; "
                            + "w tym wątków, zagadnień sieciowych, pakietu Swing, \n"
                            + "Java2D oraz kolekcji,\n"
                            + "<LI>krótkie wprowadzenie do HTML 4.01, "
                            + "zawierające prezentację układów ramek, arkuszy stylów, \n"
                            + "warstw oraz rozszerzeń Netscape Navigatora i "
                            + "Internet Explorera,\n"
                            + "<LI>krótkie wprowadzenie do protokołu HTTP 1.1, "
                            + "serwletów i JavaServer Pages,\n"
                            + "<LI>krótkie omówienie języka JavaScript 1.2\n"
                            + "</UL>", 49.95),
            new Item("lewis001", "<I>Opowieści z Narnii</I> autor: C.S. Lewis",
                    "Klasyczna dziecięca powieść przygodowa; zmagania "
                            + "Aslana Wielkiego Lwa i jego towarzyszy\n"
                            + "z Białą Wiedźmą oraz siłami zła."
                            + "Smoki, czarodzieje, trudne zadania \n"
                            + "i mówiące zwierzęta tworzą głęboką duchową "
                            + "alegorię. Seria obejmuje książki: \n"
                            + "<I>Siostrzeniec czarodzieja</I>,\n"
                            + "<I>Lew, Wiedźma i stara szafa</I>,\n"
                            + "<I>Koń i jego chłopiec</I>,\n"
                            + "<I>Książę Caspian</I>,\n" + "<I>Podróż</I>,\n"
                            + "<I>Srebrne krzesło</I> oraz \n"
                            + "<I>Ostatnia bitwa</I>.", 19.95),
            new Item(
                    "alexander001",
                    "<I>Historia Prydain</I> autor: Lloyd Alexander",
                    "Taran, pokorny hodowca świń, przyłącza się do "
                            + "potężnego Lorda Gwydiona i towarzyszy w mu w \n"
                            + "bitwie przeciwko Arawnowi - Lordowi Annuvin. Wraz "
                            + "z wiernymi przyjaciółmi oraz piękną księżniczką \n"
                            + "Eilonwy, bardem Fflewddurem Fflamem, \n"
                            + "i półczłowiekiem Gurgi, Taran odkrywa "
                            + "czym jest odwaga, honor oraz inne wartości.\n"
                            + "Seria obejmuje następujące książki: \n"
                            + "<I>Księga trzech</I>, \n"
                            + "<I>Czarny kocioł</I>, \n"
                            + "<I>Zamek Llyra</I>, \n"
                            + "<I>Taran Wędrowiec</I> oraz \n"
                            + "<I>Wielki król</I>.", 19.95),
            new Item(
                    "rowling001",
                    "<I>Trylogia o Harrym Potterze</I> autorka: "
                            + "J.K. Rowling",
                    "Pierwsze trzy książki niezwykle popularniej serii o "
                            + "początkującym czarodzieju Harrym Potterze \n"
                            + "szybko trafiły na sam początek list bestsellerów "
                            + "zarówno dla dzieci jak i dla dorosłych. Seria \n"
                            + "obejmuje książki: \n"
                            + "<I>Harry Potter i kamień "
                            + "filozoficzny</I>, \n"
                            + "<I>Harry Potter i komnata "
                            + "tajemnic</I> oraz \n" + "<I>Harry Potter i "
                            + "więzień Azkabanu</I>.", 25.95) };

    public static Item getItem(String itemID) {
        Item item;
        if (itemID == null) {
            return (null);
        }
        for (int i = 0; i < items.length; i++) {
            item = items[i];
            if (itemID.equals(item.getItemID())) {
                return (item);
            }
        }
        return (null);
    }
}

Poniżej skrypt korzystając z powyższego:

package coreservlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public abstract class CatalogPage extends HttpServlet {
    private Item[] items;
    private String[] itemIDs;
    private String title;

    protected void setItems(String[] itemIDs) {
        this.itemIDs = itemIDs;
        items = new Item[itemIDs.length];
        for (int i = 0; i < items.length; i++) {
            items[i] = Catalog.getItem(itemIDs[i]);
        }
    }

    protected void setTitle(String title) {
        this.title = title;
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html; charset=ISO-8859-2");
        if (items == null) {
            response.sendError(response.SC_NOT_FOUND, "Brak towarów.");
            return;
        }
        PrintWriter out = response.getWriter();
        out.println(ServletUtilities.headWithTitle(title)
                + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">"
                + title + "</H1>");
        Item item;
        for (int i = 0; i < items.length; i++) {
            out.println("<HR>");
            item = items[i];
            if (item == null) {
                out.println("<FONT COLOR=\"RED\">"
                        + "Nieznany identyfikator towaru " + itemIDs[i]
                        + "</FONT>");
            } else {
                out.println();
                String formURL = "OrderPage";
                formURL = response.encodeURL(formURL);
                out.println("<FORM ACTION=\"" + formURL + "\">\n"
                        + "<INPUT TYPE=\"HIDDEN\" NAME=\"itemID\" "
                        + "       VALUE=\"" + item.getItemID() + "\">\n"
                        + "<H2>" + item.getShortDescription() + " ($"
                        + item.getCost() + ")</H2>\n"
                        + item.getLongDescription() + "\n" + "<P>\n<CENTER>\n"
                        + "<INPUT TYPE=\"SUBMIT\" "
                        + "VALUE=\"Dodaj do koszyka\">\n"
                        + "</CENTER>\n<P>\n</FORM>");
            }
        }
        out.println("<HR>\n</BODY></HTML>");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}
0

moze jakies info co nie dziala, stack trace cokolwiek..

0

Wydaje mi się że trzeba przerobić metodę getItem aby wyswietlila to co jest w Item[] items()
nie wiem w php na codzien pisze a tam wszystko jest latwiejsze.
może ten log coś powie:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet CatalogPage threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:637)
root cause

java.lang.Error: Unresolved compilation problems:
items.length cannot be resolved or is not a field
item cannot be resolved
The type of the expression must be an array type but it resolved to Item
item cannot be resolved
item cannot be resolved

coreservlets.Catalog.getItem(Catalog.java:41)
coreservlets.CatalogPage.setItems(CatalogPage.java:41)
coreservlets.KidsBooksPage.init(KidsBooksPage.java:16)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:637)

0
 public static Item getItem(String itemID) {
                Item items;
                if (itemID == null) {
                        return (null);
                }
                for (int i = 0; i < items.length; i++) {
                item = items[i];
                if (itemID.equals(item.getItemID())) {
                return (item);
                }
                }
                return (null);
        }

sprawdzasz dlugosc tablicy wcale nie majac tablicy. Pole item nie jest zadeklarowane. w ogóle ta metoda nie ma wiekszego sensu. Nie widze metody getItemID.

0

to może przerobię public Item[] items() { na getItemID
a tam skasuję:

for (int i = 0; i < items.length; i++) {
          item = items[i];
          if (itemID.equals(item.getItemID())) {
          return (item);
}

muszę pomyśleć</quote>

0

Item[] items zwraca Ci wszystkie itemy a getItem jeden konkretny. po prostu w metodzie getItem zrob select * from books where id = argument metody.,

0

dzieki za podpowiedzi teraz chyba prawidłowo pobieram rekordy z bd ale wyszedł następny problem nie wiem jak to wyświetlić w poniższym pliku CatalogPage w metodzie setItems wyskakuje raz błąd ze nie idze skonwertować z Item to String a jak zostawię items.length to wyświetla: Nieznany identyfikator towaru??

CatalogPage:

package coreservlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public abstract class CatalogPage extends HttpServlet {
    private Item[] items;
    private String[] itemIDs;
    private String title;

    protected void setItems(String[] itemIDs) {
        this.itemIDs = itemIDs;
        items = new Item[itemIDs.length];
        for (int i = 0; i < items.length; i++) {
            items[i] = Catalog.getItem(itemIDs[i]);
        }

    }

    protected void setTitle(String title) {
        this.title = title;
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html; charset=ISO-8859-2");
        if (items == null) {
            response.sendError(response.SC_NOT_FOUND, "Brak towarów.");
            return;
        }
        PrintWriter out = response.getWriter();
        out.println(ServletUtilities.headWithTitle(title)
                + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">"
                + title + "</H1>");
        Item item;
        for (int i = 0; i < items.length; i++) {
            out.println("<HR>");
            item = items[i];
            if (item == null) {
                out.println("<FONT COLOR=\"RED\">"
                        + "Nieznany identyfikator towaru " + itemIDs[i]
                        + "</FONT>");
            } else {
                out.println();
                String formURL = "OrderPage";
                formURL = response.encodeURL(formURL);
                out.println("<FORM ACTION=\"" + formURL + "\">\n"
                        + "<INPUT TYPE=\"HIDDEN\" NAME=\"itemID\" "
                        + "       VALUE=\"" + item.getItemID() + "\">\n"
                        + "<H2>" + item.getShortDescription() + " ($"
                        + item.getCost() + ")</H2>\n"
                        + item.getLongDescription() + "\n" + "<P>\n<CENTER>\n"
                        + "<INPUT TYPE=\"SUBMIT\" "
                        + "VALUE=\"Dodaj do koszyka\">\n"
                        + "</CENTER>\n<P>\n</FORM>");
            }
        }
        out.println("<HR>\n</BODY></HTML>");
    }

    /** Żądania POST i GET mają być obsługiwane tak samo. */

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

przerobiony Catalog:

package coreservlets;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
//import java.util.ArrayList;
//import java.util.List;

public class Catalog {

    public Item[] items() {

        Connection conn = null; 
        try {
            conn = ConnectionHelper.getConnection();
            Statement st = conn.createStatement();
            String query = "SELECT * FROM books";
            ResultSet rs = st.executeQuery(query);
            if (!rs.next())
                return null;
            //List<Item> items = new ArrayList<Item>(rs.getRow());
            Item[] items = new Item[rs.getRow()];
            for (int i = 0; rs.next(); i++) {
                String v1 = rs.getString(1);
                String v2 = rs.getString(2);
                String v3 = rs.getString(3);
                Double v4 = rs.getDouble(4);
                items[i] = new Item(v1, v2, v3, v4);
            }
            return items;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Item getItem(String itemID) {
        try {
            Connection conn = null;
            conn = ConnectionHelper.getConnection();
            Statement st = conn.createStatement();
            String query = "SELECT * FROM books where itemID ="+ itemID;
            ResultSet rs = st.executeQuery(query);
            if (itemID == null) {
                return (null);
            }
            for (int i = 0; rs.next(); i++) {
                rs.getString(1);
            }

            }catch (SQLException e) {
                e.printStackTrace();
            }
        return null;
        }   
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0