【问题标题】:Unable to populate array of product from database无法从数据库中填充产品数组
【发布时间】:2013-01-08 08:53:05
【问题描述】:
<%@ page language="java" import="controller.*;,java.net.*,java.text.*,java.sql.*, java.util.ArrayList" %>
<html>
<body bgcolor="#ffffff">

<%
// Initialize the array of available products.
    Connection conn=JavaConnect.ConnectDb();
    PreparedStatement pst=conn.prepareStatement("SELECT * FROM products");
    ResultSet rs = pst.executeQuery();
    ArrayList<model.Item> catalog = new ArrayList();
    while(rs.next()){
       catalog.add (new model.Item(rs.getString(1), rs.getInt(2),rs.getString(3),rs.getString(4),rs.getInt(5),rs.getInt(6),rs.getInt(7)));
         for (int i=0; i < catalog.size(); i++) {
         model.Item item = catalog.get(i);
                    }


    }


%>

<a href="/shoppingcart/ViewShoppingCart.jsp">View Shopping Cart</a>
<p>
<h1>Available Products</h1>
<table border="1">
<tr><th>EAN</th><th>PIP</th><th>Name</th><th>Description</th><th>Supplier ID</th><th>Price</th><th>Quantity</th></tr>
<%

// Get a currency formatter for showing the price.
    NumberFormat currency = NumberFormat.getCurrencyInstance();

    for (int i=0; i < catalog.size(); i++)
    {
        model.Item item = catalog.get(i);

// Create the URL for adding the item to the shopping cart.
        String addItemURL =

            "/shoppingcart/AddToShoppingCartServlet?"+
            "productCode="+URLEncoder.encode(item.getEAN())+
            "&description="+URLEncoder.encode(item.getDescription())+
            "&quantity="+URLEncoder.encode(""+item.getQuantity())+
            "&price="+URLEncoder.encode(""+item.getPrice());
%>
<tr><td><%=item.getDescription()%></td><td><%=item.getQuantity()%>
    </td><td><%=item.getPrice()%></td>
<td><a href="<%=addItemURL%>">Add to Shopping Cart</a></td></tr>
<%
    }
%>
</table>
</body>
</html>






  org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 14 in the generated java file
Syntax error on token ";", delete this token

Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:457)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

我在使用 ArrayList 后遇到了这个新错误。如何解决此问题以从数据库中显示我的产品。我已经在我的代码和堆栈跟踪中包含了新的编辑。我不明白它指的是第 14 行。

【问题讨论】:

    标签: java sql arrays jsp servlets


    【解决方案1】:

    您遇到的错误正在发生,因为您正在将 2 个 Item 类导入到您的 jsp 中。更改您的导入或将完整的类名放在 jsp 代码中:

    controller.Item[] catalog = new controller.Item[100];
    

     model.Item[] catalog = new model.Item[100];
    

    【讨论】:

      【解决方案2】:

      您需要完全限定正在使用的类Item,因为类路径中有两个同名的类。我的意思是,而不是

      new Item(...)
      

      这样写:

      new model.Item(...)
      

      明确地说,“完全限定”一个类意味着,编写所有以点分隔的包,这些包会导致正在使用的特定类。

      【讨论】:

        【解决方案3】:

        Class Item 出现在您已导入的两个包中。

        import="model.*,controller.*
        

        所以你必须指定正确的,比如

         model.Item[] catalog=new model.Item[100]; //or
         controller.Item[] catalog=new controller.Item[100]; 
        

        除了使用数组,你还可以使用集合

         ArrayList<model.Item> itemList = new ArrayList();
        

        然后为每一行添加

        itemlist.add (new model.Item(rs.getString(1), 
                 rs.getInt(2),rs.getString(3),rs.getString(4),rs.getInt(5),
                 rs.getInt(6),rs.getInt(7));
        

        使用数组列表

         for (int i=0; i < itemList.size(); i++) {
            model.Item item = itemList.get(i);
         }
        

        【讨论】:

          【解决方案4】:
          1. 避免重复导入
          2. 如果您想访问,请提供完全限定的类名以及实例变量。
          3. 如果您的类和方法是静态的,您甚至可以使用静态导入。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-04
            • 1970-01-01
            • 2018-09-30
            • 1970-01-01
            相关资源
            最近更新 更多