2011-09-12 21 views
1

Eclipse、Maven、Tomcatの助けを借りてJavaプロジェクト内にデプロイするJSPファイルがあります。私はいくつかの他の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の前に同じ文を使用しています。さらに、このエラーはプロジェクトの以前の展開では表示されませんでした。私は無関係な変数にタイプミスがあり、一度修正されると、この男はどこにも突然現れなかった。

とにかく、誰かが、なぜこの列が "有効"になっているのを知っているときにこのエラーが出るのか理解できますか?データベース内のJSP、Bug Class、またはBug Tableの詳細を表示する必要がある場合は、私に知らせてください。どんな助けもありがとう。

EDIT:私が使用している2つのSQL文は次のとおりですが、いずれかの問題が発生しているかどうかはわかりません。

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 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 

二ステートメントのパラメータ

が充填されています。

上記の列は、SELECTによって返されません。

実際、あなたの2つの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/how-to-avoid-java-code-in-jsp-files)を参照してください。トップをクリームアップするには、JPAを見て、そのJDBCの定型文をすべて置き換えてください。 – BalusC

+0

ええ、私はJavaとWebベースの開発が初めてです。私が使用しているコードの多くは、動作する既存のコードからモデル化されています。そして、私が見てきたコードが最初に90年代に書かれたことは疑いありません。 –