【问题标题】:SQLException: Invalid Column Name...?SQLException: 无效的列名...?
【发布时间】:2011-09-12 18:35:45
【问题描述】:

我有一个 JSP 文件,我在 Eclipse、Maven 和 Tomcat 的帮助下将其部署在 Java 项目中。我还有一些其他的 JSP 文件几乎与这个相同,尽管它们运行不同的操作。无论如何,当我转到页面时,我已经给出了这个:

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.

Bug 是一个自定义类,可以接收结果集 -- 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 中使用过完全相同的语句,它没有给我带来任何麻烦。此外,在项目的早期部署中没有出现此错误。我在一个不相关的变量中有一个错字,一旦它被修复,这个人就突然出现了。

无论如何,当我知道“应该”列有效时,任何人都知道为什么会出现此错误吗?如果您需要查看更多的 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());

【问题讨论】:

  • 可以发一下SQL语句吗?
  • 当然可以。我在原始帖子中添加了我正在使用的两个语句。
  • 最好是create table语句,以及Bug.PERSON_OPENED_BY的值。
  • 您能否将 ixPersonOpenedBy 添加到您的第一个选择语句中?试试看:)

标签: java sql jdbc


【解决方案1】:

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

SELECT 未返回提及的列。

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

SELECT b.ixBug, b.sTitle, b.ixPersonOpenedBy

【讨论】:

  • 添加后至少会显示页面。我只是不确定为什么必须添加该列,尤其是因为我什至不使用它。
  • 您在 Bug 类的构造函数中使用它。如果您甚至不使用它,也许您只需要删除该行? :) 顺便说一句,老实说,您的映射方法很糟糕而且非常 90 年代。了解一下Javabeans 和avoiding Java code in JSP。为了达到最佳效果,请查看 JPA 以替换所有 JDBC 样板。
  • 是的,我是 Java 和基于 Web 开发的新手。我使用的很多代码都是根据现有的有效代码建模的。而且我不怀疑我一直在看的代码是在 90 年代首次编写的......
  • 没问题。只是为了让您知道,以便您至少意识到这一点:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 2020-02-23
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多