- PR -

executeQuery 時に NullPointerException

投稿者投稿内容
アレク
ベテラン
会議室デビュー日: 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) %>">
としても、画像を表示する事ができません。

(株)ぽち さんは、いつもどのようにして表示しておられるのでしょうか?
教えて頂けませんでしょうか?

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