- PR -

MySQLの表示について。

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 80
投稿日時: 2004-10-31 20:16
MySQLで作ったものを表示することについて質問があります。

bean_dbSearch.javaと、dbMvc.jspを使って、表示しようとしたら、
java.lang.NullPointerExceptionというエラーが出たので、
初期化が必要としり、

private ArrayList result;
のあとに、new ArrayList() を付け加えて、表示したところ、dbMvc.jspの←のある部分だけが、表示されるだけで、MySQLで作った部分は何も表示されません。
助けていただけないでしょうか。

bean_dbSearch.javaと、dbMvc.jspは、以下のとおりです。

======bean_dbSearch.java=========================
package dbkit;

import java.io.*;
import java.util.*;
import java.sql.*;

public class bean_dbSearch implements Serializable {
private ArrayList result = new ArrayList();
private class Kit {
public String id;
public String cho;
public String za;
public String su;
}
public bean_dbSearch(){}
public void execute(){
try{
Class.forName("org.gjt.mm.mysql.Driver");
Connection db=DriverManager.getConnection("jdbc:mysql:///dbkit?user=****&password=****&useUnicode=true&characterEncoding=SJIS");
Statement sttSql=db.createStatement();
ResultSet rs=sttSql.executeQuery("SELECT * FROM TABLE1 left join TABLE2 on TABLE1.ID=TABLE2.ID");
result=new ArrayList();
while(rs.next()){
Kit ta=new Kit();
ta.id = rs.getString("ID");
ta.za = rs.getString("ZA");
ta.su = rs.getString("SU");
ta.cho = rs.getString("CHO");
result.add(ta);
}
sttSql.close();
db.close();
}catch(Exception e){
e.printStackTrace();
}
}
public int getResultCount(){
return result.size();
}
public String getId(int index){
Kit ta=(Kit)result.get(index);
return ta.id;
}
public String getCho(int index){
Kit ta=(Kit)result.get(index);
return ta.cho;
}
public String getZa(int index){
Kit ta=(Kit)result.get(index);
return ta.za;
}
public String getSu(int index){
Kit ta=(Kit)result.get(index);
return ta.su;
}
}
=================================================

========dbMvc.jsp================================
<%@ page contentType="text/html; charset=Shift_JIS" %>
<jsp:useBean id="dbb" class="dbkit.bean_dbSearch" scope="page" />
<html>
<head>
<title>dbkit</title>
</head>
<body>
<h1 style="background:#cccccc">kitmaria</h1>
<table border="0">
<tr style="background:#00ccff">
<th>No.</th><th>za</th><th>su</th><th>cho</th>←ここの部分
</tr>
<% dbb.execute();
for(int i=0;i<dbb.getResultCount();i++){ %>
<tr style="background:#ffffcc">
<td><%=dbb.getId(i)%></td>
<td><%=dbb.getZa(i)%></td>
<td><%=dbb.getSu(i)%></td>
<td><%=dbb.getCho(i)%></td>
<% } %>
</table>
</body>
</html>


================================================
環境は
Tomcat5.0
WinXP
j2sdk1.4.2_05
MySQL
です。

どうかご教授お願いします。

[ メッセージ編集済み 編集者: fuu 編集日時 2004-11-01 00:08 ]
torakiyojp
常連さん
会議室デビュー日: 2004/08/04
投稿数: 23
投稿日時: 2004-10-31 22:10
こんばんは。

> private ArrayList result;
のあとに、new ArrayList() を付け加えて、表示したところ、dbMvc.jspの←のある部分だけが、表示されるだけで、MySQLで作った部分は何も表示されません。

</tr>を付けてないからではないでしょうか?
HTMLソースを表示して、ちゃんとしたHTMLになっているか確認してみてください。
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 80
投稿日時: 2004-11-01 00:17
torakiyojp様、返信ありがとうございます。

></tr>を付けてないからではないでしょうか?

とは、

<% dbb.execute();
for(int i=0;i<dbb.getResultCount();i++){ %>
<tr style="background:#ffffcc">
<td><%=dbb.getId(i)%></td>
<td><%=dbb.getZa(i)%></td>
<td><%=dbb.getSu(i)%></td>
<td><%=dbb.getCho(i)%></td>
<% } %>

の部分のことでしょうか?
参考にしている本を見直したところ、</tr>は<% } %>の前に置くようには、書いてありませんでした。
これの基となるものが入っているCDから、再度、取ってきて確認したところ、やはり、</tr>は<% } %>の前に置くようには、書いてありませんでした。
そして、HTMLソースの表示を確認したところ、MySQLの部分は、ありませんでした。

どのようにすれば、表示できるのでしょうか。
教えてください。お願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-11-01 12:00
executeメソッド内で例外が発生した場合、スタックトレースの表示だけして処理を続行するようにしているようですが、executeメソッドが成功したことは確認しているのでしょうか。
torakiyojp
常連さん
会議室デビュー日: 2004/08/04
投稿数: 23
投稿日時: 2004-11-01 21:52
こんばんは。

> そして、HTMLソースの表示を確認したところ、MySQLの部分は、ありませんでした。

HTMLソースにもないということは、HTMLに何もエラーが吐き出されてないのであれば、dbb.getResultCount()が0ということですね。

ukさんもおっしゃていますが、executeメソッドは成功していますか?
念のためですが、"SELECT * FROM TABLE1 left join TABLE2 on TABLE1.ID=TABLE2.ID"というSQLを発行すると、結果は0件ではなく、返って来ますか?(この質問は少し失礼かもしれません。気分を害されたらすみません。)

まずは、ukさんおっしゃる通り、executeメソッドで例外を握りつぶしていないか、確認してみてください。

[ メッセージ編集済み 編集者: torakiyojp 編集日時 2004-11-01 21:55 ]
1

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