- アレク
- ベテラン
- 会議室デビュー日: 2002/10/23
- 投稿数: 97
|
投稿日時: 2003-01-09 16:11
皆様、こんにちは。
いつもお世話になっております。
この度、JSP にてサムネール画像の一覧を表示し、サムネールを選択すると、
別ウィンドウに画像が拡大表示される、というものを作っております。
サムネール表示のため、JSP の <img src=""> から、Servlet をよびだし、
DBから取得した画像を、レスポンスの OutputStream で表示しようとしました。
ところが、検索をかけようとして、executeQuery を実行すると、
NullPointerException になってしまうのです。
以下に、問題部分のコードを記します。
| コード: |
|
public void ImageGet(String retuname, String index) throws Exception
{
String sql = null;
//SQL の生成
sql = ("select " + retuname + " from " + tablename + " where oid = " + index);
//SQLの実行
Statement stmt = dbCon.createStatement();
ResultSet rs = stmt.executeQuery(sql); //ここでエラーが出る
if(rs != null)
{
System.out.println("rs = notnull");
while(rs.next())
{
byte[] image = rs.getBytes(1);
//OutputStream に保存
ostream.write(image);
System.out.println("アウトプットストリームに保存");
}
}
else
{
System.out.println("rs = null");
}
//切断
rs.close();
}
|
Connection や Statement は、null ではありませんでした。
また、executeQuery(sql) の部分だけを try 〜 catch にかけた結果、
NullPointerException が出たので、この部分でエラーが出ていると思われます。
原因、怪しい部分等、教えていただければ幸いです。
よろしくお願致します。
|
- (株)ぽち
- ぬし
- 会議室デビュー日: 2002/09/10
- 投稿数: 376
|
投稿日時: 2003-01-09 17:23
こんにちわ。
stmtすなわちステートメントオブジェクトが
null以外は考えられないのですが、nullではない
というのはどのようにして調べましたか?
|
- アレク
- ベテラン
- 会議室デビュー日: 2002/10/23
- 投稿数: 97
|
投稿日時: 2003-01-09 17:54
(株)ぽち さん、こんにちは。
| 引用: |
|
stmtすなわちステートメントオブジェクトが
null以外は考えられないのですが、nullではない
というのはどのようにして調べましたか?
|
stmt をシステムアウトして調べたところ、null ではなく、アドレスが表示されました。
| コード: |
|
System.out.prinltn("ステートメント = " + stmt);
|
この方法じゃ駄目ですかね?
|
- DaikiRyuto
- 大ベテラン
- 会議室デビュー日: 2002/07/23
- 投稿数: 200
|
投稿日時: 2003-01-09 22:00
| 引用: |
|
アレクさんの書き込み (2003-01-09 16:11) より:
Connection や Statement は、null ではありませんでした。
また、executeQuery(sql) の部分だけを try 〜 catch にかけた結果、
NullPointerException が出たので、この部分でエラーが出ていると思われます。
|
例外のトレースを書きこんでいただいた方が良いと思います。
|
- アレク
- ベテラン
- 会議室デビュー日: 2002/10/23
- 投稿数: 97
|
投稿日時: 2003-01-09 22:54
DaikiRyuto さん、こんにちは。
| 引用: |
|
例外のトレースを書きこんでいただいた方が良いと思います。
|
すみませんでした。
以下が、例外のトレースです。
| コード: |
|
java.lang.NullPointerException
at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:61)
at org.postgresql.Connection.ExecSQL(Connection.java:398)
at org.postgresql.jdbc2.Statement.execute(Statement.java:130)
at org.postgresql.jdbc2.Statement.executeQuery(Statement.java:54)
at db.ImageData.ImageGet(ImageData.java:67)
at ImageServlet.doGet(ImageServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
at java.lang.Thread.run(Thread.java:536)
|
いまだにスタックトレースの見方がいまいち分からない状態です。
もし、よろしければ見方に関しても教えて頂けないでしょうか?
よろしくお願い致します。
|
- アレク
- ベテラン
- 会議室デビュー日: 2002/10/23
- 投稿数: 97
|
投稿日時: 2003-01-10 00:26
どうも、すみませんでした。
やはり、データベースへのコネクションがうまくいっていなかったようで、
きちんと接続できるようにした所、解決致しました。
ところが喜びもつかの間、また新たな問題が持ち上がりました。
JSP でサムネールを表示する際に、<img src=""> で毎回 Servlet を
呼び出しているせいか、java.net.SocketException: Socket closed
エラーがでるようになってしまったのです。
レコードの数が増えてくると、<img src=""> で毎回 Servlet を
呼び出してサムネールを表示するのも、どうかと思うのですが。
データベースから取得した画像を一覧表示するのに
何かよい方法は無いでしょうか?
|
- (株)ぽち
- ぬし
- 会議室デビュー日: 2002/09/10
- 投稿数: 376
|
投稿日時: 2003-01-10 14:51
| 引用: |
|
レコードの数が増えてくると、<img src=""> で毎回 Servlet を
呼び出してサムネールを表示するのも、どうかと思うのですが。
データベースから取得した画像を一覧表示するのに
何かよい方法は無いでしょうか?
|
こんにちわ。
どのようにしたらDB接続がうまく行ったのか気になる今日この頃ですが。
通常でしたら、
1.クライアントからservletに対してリクエスト
2.servletがBeanに処理流し、jspにforwad
3.Beanは検索結果を一気に取得し、Collectionか何かに格納。
4.jsp側でBeanに格納されてる結果を取得、表示
こんな感じ?
|
- アレク
- ベテラン
- 会議室デビュー日: 2002/10/23
- 投稿数: 97
|
投稿日時: 2003-01-10 18:02
(株)ぽちさん、どうもありがとうございます。
早速、Bean で画像データを getBytes() し、
ArrayList に放り込んで、それを JSP 側で表示させるようにしました。
ところが、以前と同じように、<img src="<%= list.get(i) %>">
としても、画像を表示する事ができません。
(株)ぽち さんは、いつもどのようにして表示しておられるのでしょうか?
教えて頂けませんでしょうか?
|