- PR -

JSPで検索結果を表示する方法

投稿者投稿内容
ひびき
会議室デビュー日: 2004/11/09
投稿数: 18
投稿日時: 2004-11-12 16:31
お世話になっております。

プロパティファイルにDriver、url、user、passwordの情報を持たせ、
それを読み込んでDBに接続し、検索を行おうとしています、

JAVAで実行すると、DB接続も検索もでき、検索結果も表示することができます。
ですが、JSPからそのクラスを呼び出して、検索結果を表示しようとすると、
Nullのオブジェクトが返ってきてしまい、結果が表示できません。

結果を表示するために、なにかよい方法はありますでしょうか?
ご教授お願いいたします。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-11-12 16:48
JSPから呼び出したクラスのメソッドは本当に動いていますか?
例外は発生していませんか?
メソッドの実行が確認できましたか?

[ メッセージ編集済み 編集者: raystar 編集日時 2004-11-12 16:49 ]
影フリー
常連さん
会議室デビュー日: 2004/11/12
投稿数: 39
お住まい・勤務地: 東京都
投稿日時: 2004-11-12 16:49
JSPも結局サブレットでありJAVAソースなんだから同じだと思います。
現状の説明だけでは分からないですね。
JSPソースを見なきゃいけないと思います。
ひびき
会議室デビュー日: 2004/11/09
投稿数: 18
投稿日時: 2004-11-12 17:08
raystarさん、影フリーさん、お返事ありがとうございます。

JSPから呼び出したクラスのメソッドの実行の確認というのが方法がわからなくてできていないのですが、
まったく同じクラスを、JAVAのから呼び出した場合は、メソッドの実行を確認できました。

if (result.size() == 0) {
のところでNullPointerExceptionが発生してしまうようなのですが...

JSPのソースは以下のようになっています。

<%@ page language="java" contentType="text/html; charset=Shift_JIS" %>
<%@ page import="java.util.Vector,java.util.Hashtable" %>
<jsp:useBean id="kouzoubean" scope="page" class="schemaSearch.TableKouzouHyoujiBean" />
<html>
<head><title>テーブル構造表示</title></head>
<body>
<center>
<%
String tableName = request.getParameter("table");
%>
<%
try {
kouzoubean.logic(tableName);
Vector result = kouzoubean.getResult();
if (result.size() == 0) {
if(tableName.equals("")) {
%>
テーブル名を入力してください。
<%
}
else {
%>
テーブル『<%= tableName %>』は存在しません。
<%
}
}
else {
%>
テーブル 『<%= tableName %>』 のテーブル構造
<table><tr><td height = 10></tr></td></table>
<table border = "1">
<tr><td width = "200">列英名</td><td width = "150">属性</td><td>精度</td><td>NULL可能</td></tr>
<%
for( int i = 0; i < result.size(); i++) {
Hashtable hash = (Hashtable)result.get(i);
%>
<tr>
<td><%= hash.get("COLUMN_NAME") %></td>
<td><%= hash.get("DATA_TYPE") %>(<%= hash.get("CHAR_LENGTH") %>)</td>
<td><center><%= hash.get("DATA_PRECISION") %></center></td>
<%
if( (hash.get("NULLABLE")).equals("N")){
%>
<td><center>NO</center></td>
<%
}
else {
%>
<td><center>YES</center></td>
<% }
%>
</tr>
<%
}
}

} catch (Exception e){
out.println("<font color=red><h3>error</h3></font>" + e);
e.printStackTrace();
}
%>
</table>
<form action = "TableKouzouKensku.jsp" method = "POST">
<center><input type ="submit" value = "戻る"></center>
</form>
</center>
</body>
</html>
影フリー
常連さん
会議室デビュー日: 2004/11/12
投稿数: 39
お住まい・勤務地: 東京都
投稿日時: 2004-11-12 17:24
まず
if (result.size() == 0) { での問題であれば
ここを確認してみてください。
=>String tableName = request.getParameter("table");
tableNameがNULLじゃないか?
もしtableNameがNULLだったら当然
kouzoubean.logic(tableName);
Vector result = kouzoubean.getResult();
もNULLでしょう。

念のためですが
if(tableName.equals("")) { のチェックは良くないです。
tableNameがNULLだったらエラーですね。
これがよいです。=>if("".equals(tableName)){
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-11-12 17:36
kouzoubean.logic(tableName);
Vector result = kouzoubean.getResult();

まず、 kouzoubean.getResult() の戻り値がNULLです。
kouzoubean#getResult()でVectorが戻るようですが、
初期値はNULLですか?

初期値のままですと、Vectorオブジェクトが初期化されていませんね。

kouzoubean.logic(String)メソッドが正しく実行され、
Vectorオブジェクトが初期化されているか確認しましょう
ひびき
会議室デビュー日: 2004/11/09
投稿数: 18
投稿日時: 2004-11-12 17:58
影フリーさん、返信ありがとうございます。

tableNameはNullではありませんでした。
kouzoubean.logic()では、受け取ったtableNameをもとに
"select COLUMN_NAME,DATA_TYPE,CHAR_LENGTH,DATA_PRECISION,NULLABLE from USER_TAB_COLUMNS where TABLE_NAME = '" + table + "'"
というSQLを発行しています。


raystarさん、返信ありがとうございます。

kouzoubean#getResult()ではコンストラクタ部を
public TableKouzouHyoujiBean(){
 result = null;
 driver = null;
 url = null;
user = null;
password = null;
}
としています。
また、kouzoubean.logic(String)メソッドは実行されているのを確認しました。


なにか他に確認するべき点などありますでしょうか?
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-11-12 19:41
引用:

kouzoubean#getResult()ではコンストラクタ部を
public TableKouzouHyoujiBean(){
 result = null;
 driver = null;
 url = null;
user = null;
password = null;
}



SQLを処理するメソッドでresultに値をいれていますか?

result = new ArrayList();
result.add(object);

↑のような処理がないと result には値が入らないはずですよ。

スキルアップ/キャリアアップ(JOB@IT)