- - PR -
javalangNullPointer
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2002-11-21 22:34
素人です。
検索条件を選択して、「検索」ボタンを押すと DBから引っ張ってDBの項目を表示する簡単なプログラムなのですが、 javalangNullPointerというエラーが1回目の検索に必ず出ます。 無視してもう一回「検索」ボタンを押せば、表示されます。 また、検索ボタンを連打するとたまにでます。 この原因は何が考えられますか? | ||||
|
投稿日時: 2002-11-21 22:40
具体的な構成やソースコードを示して頂かないと何とも答えようがないと思います。 | ||||
|
投稿日時: 2002-11-22 09:19
一度目の処理では、NULLの状態のオブジェクトに対して
何か処理をしてしまっているとか。。。。ですか? | ||||
|
投稿日時: 2002-11-22 09:25
DBアクセスなんて画面からじゃないと確認できないような処理ではないので、
コマンドラインから呼んで問題の範囲を狭めましょう。 | ||||
|
投稿日時: 2002-11-22 15:02
多分SQLExceptionが出ていると思います。
これは推測ですがSQLで落ちているのでデータが取れない。 データが無いのでNullを返す。 こんなところでしょうか。 [ メッセージ編集済み 編集者: GON 編集日時 2002-11-22 15:04 ] | ||||
|
投稿日時: 2002-11-22 17:53
色々なアドバイスありがとうございます。
ただ、SQLExceptionは出ていません。下記のとおりです。 java.lang.NullPointerException もしかしたら、String初期化をしていないからですかね。 いつもいきなり String **** = 'aiueo'; のように代入しているので。。。 | ||||
|
投稿日時: 2002-11-22 18:08
落ちている部分はどこだか分かりますか?
できれば、コードと、エラーの内容を見せてくれませんか? String s = "ABCD"; とかなら、OKだと思うんですけど。。。 初期化していないStringオブジェクトのメソッドを呼んでいるところがあるのでしょうか。。。。? java.sql以下のどれかで怒られているということも考えられそうなのですが。 | ||||
|
投稿日時: 2002-11-22 18:19
エラーは下記のとおりです。
Exception: java.lang.NullPointerException at oracle.jdbc.driver.OracleStatement.clearDefines(OracleStatement.java:1065) at oracle.jdbc.driver.OracleStatement.end_of_result_set(OracleStatement.java:2513) at oracle.jdbc.driver.OracleResultSetImpl.internal_close(OracleResultSetImpl.java:638) at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:229) at _java._meisai._jspService(_meisai.java:199) at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java) at oracle.jsp.app.JspApplication.dispatchRequest(JspApplication.java) at oracle.jsp.JspServlet.doDispatch(JspServlet.java) at oracle.jsp.JspServlet.internalService(JspServlet.java) at oracle.jsp.JspServlet.service(JspServlet.java) at javax.servlet.http.HttpServlet.service(HttpServlet.java:588) at org.apache.jserv.JServConnection.processRequest(JServConnection.java:402) at org.apache.jserv.JServConnection.run(JServConnection.java:260) at java.lang.Thread.run(Unknown Source) 非常に汚いソースなのですが。。。もうしわけありません。 <%@ page import="java.sql.*" %> <%@ page import="oracle.sql.*" %> <%@ page import="oracle.jdbc.driver.*" %> <%@ page import="java.util.*" %> <%@ page contentType="text/html; charset=shift_jis" %> <%! Connection conn; %> <%! Statement stmt; %> <%! ResultSet rset; %> <% Class.forName("oracle.jdbc.driver.OracleDriver"); %> <% conn = DriverManager.getConnection("jdbc:oracle:thin:@****:**** <% stmt = conn.createStatement(); %> <HTML> <HEAD> </HEAD> <body background="mita.GIF"> <%-- CSV --%> <% File file = new File("/home1/apps01/oraebscomn/portal/java/mita.csv"); if (file.exists()){ } else { OutputStreamWriter fwtemp = new OutputStreamWriter(new FileOutputStream(file), "Cp943c"); fwtemp.write("Create New File with CCSID 943"); PrintWriter pwtemp = new PrintWriter(fwtemp); fwtemp.close(); pwtemp.close(); } OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(file), "MS932"); BufferedWriter bw = new BufferedWriter(fw); PrintWriter pw = new PrintWriter(bw); StringBuffer sb = new StringBuffer(""); %> <%-- ヘッダー部からの情報を変数に入れる --%> <% String kamoku_cd = request.getParameter("kamoku"); %> <% String buten_cd = request.getParameter("buten"); %> <% String kankei_cd = request.getParameter("kankei"); %> <% String tuuka_cd = request.getParameter("tuuka"); %> <%-- CSV --%> <% pw.println("未決済元帳"); pw.println("勘定科目コード,"+'"'+kamoku_cd+'"'+",部店コード,"+'"'+buten_cd+'"'+",関係会社コード,"+'"'+kankei_cd+'"'+",通貨コード,"+tuuka_cd); %> <%-- ヘッダーの情報に1箇所でも空欄があれば下記変数にフラグを立てる --%> <% String tmp_cd0= "0" ;%> <% String tmp_cd1 = "0" ;%> <% String tmp_cd2 = "0" ;%> <%-- SQL文を発行 --%> <% String sqlQuery = "SELECT ID, CREATION_DATE,INPUT_PERSON,JE_HEADER_ID,COMPANY_CODE,STORE_CODE,ACCOUNTS_CODE,RELATION_COMPANY_CODE,BANK_CODE,TAX_DIV,DESCRIPTION,CURRENCY_CODE,ACCOUNTED,ENTERED,OUTSTANDING_MONEY,ENTERED_FLG FROM ZHC_OUTSTANDING_LEDGER"; String sqlQuery_cnt = "SELECT count(*) cnt from *****************"; %> <%-- where句作成 --%> <% sqlQuery += " WHERE ACCOUNTS_CODE = '" + kamoku_cd + "'"; %> <% sqlQuery_cnt += " WHERE ACCOUNTS_CODE = '" + kamoku_cd + "'"; %> <% if ((buten_cd == null) || buten_cd.equals("")){ tmp_cd0 = "1"; } else { sqlQuery += " and STORE_CODE = '" + buten_cd + "'"; sqlQuery_cnt += " and STORE_CODE = '" + buten_cd + "'"; } if ((kankei_cd == null) || kankei_cd.equals("")){ tmp_cd1 = "1"; } else { sqlQuery += " and RELATION_COMPANY_CODE = '" + kankei_cd + "'"; sqlQuery_cnt += " and RELATION_COMPANY_CODE = '" + kankei_cd + "'"; } if ((tuuka_cd == null) || tuuka_cd.equals("")) { tmp_cd2 = "1"; } else { sqlQuery += " and CURRENCY_CODE = '" + tuuka_cd + "'"; sqlQuery_cnt += " and CURRENCY_CODE = '" + tuuka_cd + "'"; } %> <% sqlQuery += "ORDER BY CREATION_DATE ASC,ACCOUNTS_CODE,STORE_CODE,RELATION_COMPANY_CODE "; %> <%-- 件数カウント用SQL実行0件ではない場合のみ明細部を作成する --%> <% String cnt = "0" ;%> <% rset = stmt.executeQuery( sqlQuery_cnt ); %> <% while( rset.next() ){ %> <% cnt = rset.getString( "cnt" ); %> <% } %> <% if ( cnt.equals("0") ){ cnt = "0"; } else { %> <%-- 明細部HTML作成 --%> <FORM NAME="form1" METHOD="POST" ACTION="http://******.jsp" onSubmit="return check()" TARGET="fr5" > <input type="submit" name=kousin value=" 更 新 " onSubmit="return check()"> <input type="button" onClick=CheckP() NAME=csv VALUE=" C S V "> 決済金額入力欄:<input type='text' name='money' value=''> 合計明細行は<%= cnt %> 行です。 <P> <%-- 明細部ヘッダーHTML文開始 --%> <table border='F' width=100%> <tr> <td ALIGN=CENTER BGCOLOR=#D8BFD8 NOWRAP> </td> <td ALIGN=CENTER BGCOLOR=#D8BFD8 NOWRAP>計上日</td> <td ALIGN=CENTER BGCOLOR=#D8BFD8 NOWRAP>入力者</td> <td ALIGN=CENTER BGCOLOR=#D8BFD8 NOWRAP>仕訳番号</td> <td ALIGN=CENTER BGCOLOR=#D8BFD8 NOWRAP>AFF</td> <td ALIGN=CENTER BGCOLOR=#D8BFD8 NOWRAP>摘要</td> <td ALIGN=CENTER BGCOLOR=#D8BFD8 NOWRAP>通貨</td> <td ALIGN=CENTER BGCOLOR=#D8BFD8 NOWRAP>計上金額</td> <td ALIGN=CENTER BGCOLOR=#D8BFD8 NOWRAP>未決済金額</td> </tr> <% pw.println("計上日,入力者,仕訳番号,AFF,摘要,通貨,計上金額,未決済金額"); %> <%-- 明細部作成用SQL実行 --%> <% rset = stmt.executeQuery( sqlQuery ); %> <% String currency_flg="0"; %> <% while( rset.next() ){ %> <tr><td ALIGN=CENTER BGCOLOR=#FFFFFF><input type='checkbox' name="edit" value=<%= rset.getString( "ID" )%>></td> <td BGCOLOR=#FFFFFF><%= rset.getString( "CREATION_DATE" ) %> </td> <td BGCOLOR=#FFFFFF><%= rset.getString( "INPUT_PERSON" ) %> </td> <td BGCOLOR=#FFFFFF><%= rset.getString( "JE_HEADER_ID" ) %> </td> <td BGCOLOR=#FFFFFF><%= rset.getString( "COMPANY_CODE" ) %>,<%= rset.getString( "STORE_CODE" ) %>,<%= rset.getString( "ACCOUNTS_CODE" ) %>,<%= rset.getString( "RELATION_COMPANY_CODE" ) %>,<%= rset.getString( "BANK_CODE" ) %>,<%= rset.getString( "TAX_DIV" ) %> </td> <td BGCOLOR=#FFFFFF><%= rset.getString( "DESCRIPTION" ) %> </td> <td ALIGN=RIGHT BGCOLOR=#FFFFFF ><%= rset.getString( "CURRENCY_CODE" ) %> </td> <% if((rset.getString("CURRENCY_CODE")).equals("JPY")){ currency_flg = "0"; %> <td ALIGN=RIGHT BGCOLOR=#FFFFFF NOWRAP><%= rset.getString( "ACCOUNTED" ) %> </td> <% } else if((rset.getString("ENTERED_FLG")).equals("外貨計上")){ currency_flg = "1"; %> <td ALIGN=RIGHT BGCOLOR=#FFFFFF NOWRAP><%= rset.getString( "ENTERED" ) %>(<%= rset.getString( "ENTERED_FLG" ) %>)</td> <% }else{ currency_flg = "1"; %> <td ALIGN=RIGHT BGCOLOR=#FFFFFF NOWRAP><%= rset.getString( "ACCOUNTED" ) %>(<%= rset.getString( "ENTERED_FLG" ) %>)</td> <% } %> <td ALIGN=RIGHT BGCOLOR=#FFFFFF NOWRAP><%= rset.getString( "OUTSTANDING_MONEY" ) %> </td> </tr> <% sb.append(rset.getString( "CREATION_DATE") + ","); %> <% sb.append(rset.getString( "INPUT_PERSON") + ","); %> <% sb.append(rset.getString( "JE_HEADER_ID") + ","); %> <% sb.append('"' + rset.getString( "COMPANY_CODE" ) +","+ rset.getString( "STORE_CODE" ) +","+ rset.getString( "ACCOUNTS_CODE") +","+ rset.getString( "RELATION_COMPANY_CODE" ) +","+ rset.getString( "BANK_CODE" ) +","+ rset.getString( "TAX_DIV") + '"' + ","); %> <% sb.append(rset.getString( "DESCRIPTION" ) + ","); %> <% sb.append(rset.getString( "CURRENCY_CODE" ) + ","); %> <% if(currency_flg.equals("0")){ sb.append(rset.getString( "ACCOUNTED" ) + ","); } else{ sb.append(rset.getString( "ENTERED" ) + "(" + rset.getString( "ENTERED_FLG" ) + "),"); } %> <% sb.append(rset.getString( "OUTSTANDING_MONEY" ) +"\n"); %> <% } %> </table> <INPUT TYPE=hidden NAME="id1" VALUE=''> <INPUT TYPE=hidden NAME="id2" VALUE=''> <INPUT TYPE=hidden NAME="tmp_cd0" value=<%= tmp_cd0 %>> <INPUT TYPE=hidden NAME="tmp_cd1" value=<%= tmp_cd1 %>> <INPUT TYPE=hidden NAME="tmp_cd2" value=<%= tmp_cd2 %>> <% } %> <% sb.append(" "); pw.println(sb); pw.close(); bw.close(); fw.close(); %> <% if ( cnt.equals("0") ){ %> <center>検索条件には1件もありませんでした。 </center> <% } %> </body> <SCRIPT LANGUAGE='JavaScript'> <!-- //1つもチェックマークが無いと送信されないようにする関数 function check() { flag=false; /* if(document.form1.tmp_cd0.value=="1"||document.form1.tmp_cd1.value=="1"||document.form1.tmp_cd2.value=="1"){ alert("ヘッダーの全ての条件を選択していないと更新はできません"); flag=false; return flag; } */ var val = new Array(); checksum=0; mm = 0; n=document.form1.edit.length; for(i=0;i<n;i++){ if(document.form1.edit[i].checked){ val[i] = document.form1.edit[i].value; if(mm == 1){ document.form1.id2.value = val[i]; } if(mm == 0){ document.form1.id1.value = val[i]; mm = 1; } flag=true; checksum++; } } if(checksum < 2){ alert("チェックマークが足りません!"); flag=false; } if(checksum > 2){ alert("チェックマークは2箇所までしかつけれません!"); flag=false; } str = document.form1.money.value; newstr=str.replace(/^\s+|\s+$/g, "") if(newstr == ""){ alert("決済金額を入力して下さい。"); flag=false; } else {if(isNaN(parseInt(newstr))==true){ alert("数字を入力して下さい"); flag=false; } } return flag; } //--> function CheckP(){ location.href='mita.csv' return true } </SCRIPT> </html> <% if (rset != null) rset.close(); %> <% if (stmt != null) stmt.close(); %> <% if (conn != null) conn.close(); %> | ||||
