2011-09-12 125 views
1

我有一个JSP文件,我在Eclipse,Maven和Tomcat的帮助下部署在Java项目中。我还有几个其他的JSP文件几乎与这个文件相同,尽管它们运行的​​是不同的操作。无论如何,当我去的网页,我考虑了:SQLException:无效的列名称...?

org.apache.jasper.JasperException: An exception occurred processing JSP page /entertime2.jsp at line 106 

103: rsBug = psBug.executeQuery(); 
104: 
105: while(rsBug.next()) { 
106:  Bug b = new Bug(rsBug); 
107:  out.println("<option value='" + b.get(Bug.BUG_ID) + "'>" + b.get(Bug.TITLE) + "</option>"); 
108: } 
109: rsBug.close(); 

root cause 

javax.servlet.ServletException: java.sql.SQLException: Invalid column name ixPersonOpenedBy. 

错误是,可以在结果集的自定义类 - rsBug - 并执行以下操作:

setValue(Bug.BUG_ID,rs.getString(Bug.BUG_ID)); 
setValue(Bug.PERSON_OPENED_BY,rs.getString(Bug.PERSON_OPENED_BY)); 
setValue(Bug.PERSON_ASSIGNED_TO,rs.getString(Bug.PERSON_ASSIGNED_TO)); 
setValue(Bug.TITLE, rs.getString(Bug.TITLE)); 
setValue(Bug.PROJECT_ID,rs.getString(Bug.PROJECT_ID)); 

其中,BUG_ID,PERSON_OPENED_BY,PERSON_ASSIGNED_TO,TITLE和PROJECT_ID都是Bug类的字符串成员,与存储在数据库中的Bug表中的列名对应。现在,表格中有ixPersonOpenedBy列,但以前从未给我提过任何问题。我不确定它与我尝试执行的SQL语句是否有关系,但我在其他JSP中使用了EXACT语句,但它并没有给我带来任何麻烦。另外,这个错误在项目早期的部署中并没有出现。我在一个不相关的变量中输入了一个错字,一旦修正,这个人就不知从哪里跳出来了。

无论如何,任何人都可以看到,当我知道列“应该”有效的时候会出现这个错误吗?如果您需要查看更多的JSP,Bug类或数据库中的Bug表,请让我知道;任何帮助表示赞赏。

编辑:这里是我使用的两个SQL语句,但我不确定是否导致问题。

SELECT p.ixPerson, p.sFullName 
FROM Person p, jwTeamMembers t 
WHERE p.ixPerson = t.ixPerson 
ORDER BY p.sFullName ASC 


SELECT b.ixBug, b.sTitle 
FROM Bug b, Person per, Project p, Area a, jwTime t, jwTeamMembers m, jwTeam jt, Status s, jwDivision d 
WHERE per.ixPerson = t.ixPerson AND t.ixBug = b.ixBug AND b.ixProject = p.ixProject AND b.ixArea = a.ixArea 
    AND per.ixPerson = m.ixPerson AND m.ixTeam = jt.ixTeam AND b.ixStatus = s.ixStatus AND a.ixDivision *= d.ixDivision 
    AND (per.ixPerson = ?) 
GROUP BY b.ixBug, b.sTitle 
ORDER BY b.ixBug DESC 

在第二条语句的参数填充:

psBug.setInt(1, Integer.valueOf(personId).intValue()); 
+0

你可以发布SQL语句吗? – aldrin

+0

当然可以。我将两个我正在使用的陈述添加到原始帖子中。 –

+0

并且最好使用create table语句和Bug.PERSON_OPENED_BY的值。 – extraneon

回答

5

值java.sql.SQLException:无效的列名ixPersonOpenedBy。

提到的列不会被SELECT返回。

事实上,两个SELECT查询都没有指定该列。相应地修复它。例如。

SELECT b.ixBug, b.sTitle, b.ixPersonOpenedBy 
+0

它现在至少会在添加它后显示页面。我只是不确定为什么我必须添加该列,尤其是因为我甚至没有使用它。 –

+0

你正在'Bug'类的构造函数中使用它。也许你只需要删除该行,如果你甚至不使用它? :)顺便说一句,你的映射方法老实说,可怕,非常90年代。学习一些关于[Javabeans](http://stackoverflow.com/questions/1727603/places-where-javabeans-are-used)以及关于[避免JSP中的Java代码](http://stackoverflow.com/questions/ 3177733 /如何对避免-java的代码中,JSP文件)。为了解决问题,请查看JPA来替换所有JDBC样板。 – BalusC

+0

是的,我不熟悉Java和基于Web的开发。我正在使用的许多代码是基于现有代码的模型。我不怀疑我一直在看的代码是在90年代首次编写的... –