Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我不能从这个相当琐碎的查询中得到任何结果?_Sql_Jsp_Jakarta Ee_Netbeans_Glassfish - Fatal编程技术网

Sql 为什么我不能从这个相当琐碎的查询中得到任何结果?

Sql 为什么我不能从这个相当琐碎的查询中得到任何结果?,sql,jsp,jakarta-ee,netbeans,glassfish,Sql,Jsp,Jakarta Ee,Netbeans,Glassfish,我试图从一个相当简单的查询中获得结果,并将这些结果写在jsp页面上。使用Netbeans运行Glassfish 3.1。当我运行项目时,我从例程返回一个空列表 当我在Services中右键单击该表并点击View Data时,我可以看到该表已填充,当我将查询复制并通过SQL命令窗口并运行它时,它将给出预期的长度为2的列表 有几个类似的问题(如),但似乎都没有多大帮助。我在这方面是新手,所以我可能还不明白其他问题的解决方案 这里有很多因素在起作用,我不确定应该包括什么。我已经包括了执行查询的例程、调

我试图从一个相当简单的查询中获得结果,并将这些结果写在jsp页面上。使用Netbeans运行Glassfish 3.1。当我运行项目时,我从例程返回一个空列表

当我在Services中右键单击该表并点击View Data时,我可以看到该表已填充,当我将查询复制并通过SQL命令窗口并运行它时,它将给出预期的长度为2的列表

有几个类似的问题(如),但似乎都没有多大帮助。我在这方面是新手,所以我可能还不明白其他问题的解决方案

这里有很多因素在起作用,我不确定应该包括什么。我已经包括了执行查询的例程、调用该例程的JSP代码、我正在使用的实体类以及我在项目运行时获得的服务器日志输出。如果需要更多的信息,请告诉我,我会把它贴出来

我真的很感谢你的帮助

格里夫

执行查询的例程:

public static LinkedList<String> getCategories(EntityManager entityManager) {
    try {
        Query query = entityManager.createQuery(
                "SELECT DISTINCT i.category from ItemEntity i");
        List resultList = query.getResultList();
        if (!resultList.isEmpty()) {
            return new LinkedList<String>(resultList);
        }
    } catch(Exception e) {
        System.out.println(e);
    } finally {
        return new LinkedList<String>();
    }
}
<body>
    <h1>Store</h1>
    <h2>Categories</h2>
    <%
        Context environmentContext 
                = (Context) new InitialContext().lookup("java:comp/env");
        EntityManager entityManager 
                = (EntityManager) environmentContext.lookup("persistence/dbunit");

        LinkedList<String> categories = DataBase.getCategories(entityManager);

        ListIterator<String> categoryIterator = categories.listIterator();
        String category = "";
    %>

    <form action="category.jsp">
        <%  while (categoryIterator.hasNext()) { %>
                <%  category = categoryIterator.next(); %>
                <input type="submit" class="submitButtonAsLink" value="<%= category %>" name="<%= category %>" /><br />
        <% } %>
    </form> 
</body>
@Entity
public class ItemEntity implements Serializable {
    private static final long serialVersionUID = 1L;

@Id @GeneratedValue(strategy = GenerationType.AUTO)
    private String id;

    private String title;
    private String longDescription;
    private double cost;
    private String category;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set  
        if (!(object instanceof ItemEntity)) {
            return false;
        }
        ItemEntity other = (ItemEntity) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "store.model.entities.ItemTable[ id=" + id + " ]";
    }

    //getters and setters omitted. 
    //There are getters and setters for every field except id.
}
INFO: file:/Users/griffgeorge/Dropbox/school/design-arch/labs/Lab4Exercise/build/web/WEB-INF/classes/_Lab4ExercisePU logout successful
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
INFO: EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504
INFO: file:/Users/griffgeorge/Dropbox/school/design-arch/labs/Lab4Exercise/build/web/WEB-INF/classes/_Lab4ExercisePU login successful
WARNING: Multiple [2] JMX MBeanServer instances exist, we will use the server at index [0] : [com.sun.enterprise.v3.admin.DynamicInterceptor@1ed957d].
WARNING: JMX MBeanServer in use: [com.sun.enterprise.v3.admin.DynamicInterceptor@1ed957d] from index [0] 
WARNING: JMX MBeanServer in use: [com.sun.jmx.mbeanserver.JmxMBeanServer@1a84f3c] from index [1] 
WARNING: PER01000: Got SQLException executing statement "CREATE TABLE ITEMENTITY (ID VARCHAR(255) NOT NULL, CATEGORY VARCHAR(255), COST FLOAT, LONGDESCRIPTION VARCHAR(255), TITLE VARCHAR(255), PRIMARY KEY (ID))": java.sql.SQLException: Table/View 'ITEMENTITY' already exists in Schema 'APP'.
WARNING: PER01000: Got SQLException executing statement "CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(15), PRIMARY KEY (SEQ_NAME))": java.sql.SQLException: Table/View 'SEQUENCE' already exists in Schema 'APP'.
WARNING: PER01000: Got SQLException executing statement "INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)": java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL111012114449870' defined on 'SEQUENCE'.
INFO: WEB0671: Loading application [Lab4Exercise] at [/Lab4Exercise]
服务器日志:

public static LinkedList<String> getCategories(EntityManager entityManager) {
    try {
        Query query = entityManager.createQuery(
                "SELECT DISTINCT i.category from ItemEntity i");
        List resultList = query.getResultList();
        if (!resultList.isEmpty()) {
            return new LinkedList<String>(resultList);
        }
    } catch(Exception e) {
        System.out.println(e);
    } finally {
        return new LinkedList<String>();
    }
}
<body>
    <h1>Store</h1>
    <h2>Categories</h2>
    <%
        Context environmentContext 
                = (Context) new InitialContext().lookup("java:comp/env");
        EntityManager entityManager 
                = (EntityManager) environmentContext.lookup("persistence/dbunit");

        LinkedList<String> categories = DataBase.getCategories(entityManager);

        ListIterator<String> categoryIterator = categories.listIterator();
        String category = "";
    %>

    <form action="category.jsp">
        <%  while (categoryIterator.hasNext()) { %>
                <%  category = categoryIterator.next(); %>
                <input type="submit" class="submitButtonAsLink" value="<%= category %>" name="<%= category %>" /><br />
        <% } %>
    </form> 
</body>
@Entity
public class ItemEntity implements Serializable {
    private static final long serialVersionUID = 1L;

@Id @GeneratedValue(strategy = GenerationType.AUTO)
    private String id;

    private String title;
    private String longDescription;
    private double cost;
    private String category;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set  
        if (!(object instanceof ItemEntity)) {
            return false;
        }
        ItemEntity other = (ItemEntity) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "store.model.entities.ItemTable[ id=" + id + " ]";
    }

    //getters and setters omitted. 
    //There are getters and setters for every field except id.
}
INFO: file:/Users/griffgeorge/Dropbox/school/design-arch/labs/Lab4Exercise/build/web/WEB-INF/classes/_Lab4ExercisePU logout successful
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
INFO: EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504
INFO: file:/Users/griffgeorge/Dropbox/school/design-arch/labs/Lab4Exercise/build/web/WEB-INF/classes/_Lab4ExercisePU login successful
WARNING: Multiple [2] JMX MBeanServer instances exist, we will use the server at index [0] : [com.sun.enterprise.v3.admin.DynamicInterceptor@1ed957d].
WARNING: JMX MBeanServer in use: [com.sun.enterprise.v3.admin.DynamicInterceptor@1ed957d] from index [0] 
WARNING: JMX MBeanServer in use: [com.sun.jmx.mbeanserver.JmxMBeanServer@1a84f3c] from index [1] 
WARNING: PER01000: Got SQLException executing statement "CREATE TABLE ITEMENTITY (ID VARCHAR(255) NOT NULL, CATEGORY VARCHAR(255), COST FLOAT, LONGDESCRIPTION VARCHAR(255), TITLE VARCHAR(255), PRIMARY KEY (ID))": java.sql.SQLException: Table/View 'ITEMENTITY' already exists in Schema 'APP'.
WARNING: PER01000: Got SQLException executing statement "CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(15), PRIMARY KEY (SEQ_NAME))": java.sql.SQLException: Table/View 'SEQUENCE' already exists in Schema 'APP'.
WARNING: PER01000: Got SQLException executing statement "INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)": java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL111012114449870' defined on 'SEQUENCE'.
INFO: WEB0671: Loading application [Lab4Exercise] at [/Lab4Exercise]

你的persistence.xml怎么样?这是否指向您期望的数据源?然后,该数据源是否指向您期望的连接池?

您的
getCategories()
方法总是返回空列表,因为
中的返回最后总是运行(即使在第一次
返回之后)

这里根本不需要
finally
子句。你可以简化成这样

public static LinkedList<String> getCategories(EntityManager entityManager) {
    try {
        Query query = entityManager.createQuery(
                "SELECT DISTINCT i.category from ItemEntity i");
        return new LinkedList<String>(query.getResultList());
    } catch(Exception e) {
        System.out.println(e);
        return new LinkedList<String>();
    }
}
返回

0

尝试为SQL启用日志记录,例如,请参见此处的“如何:”;然后公布结果,如果你还不知道的话。是的,结果就是这样。只是其中的一件事,我以前从未尝试过,也不知道这门语言。你每天都能学到新东西