- PR -

java.lang.IllegalArgumentExceptionのエラーについて

投稿者投稿内容
うさぎ鍋
会議室デビュー日: 2004/12/22
投稿数: 16
お住まい・勤務地: 静岡
投稿日時: 2005-01-06 12:36
こんにちわ3回目の投稿になりますうさぎ鍋です。
毎回同じようなエラーの解決方法でご迷惑おかけしますことをお詫び申し上げます。
今回のエラーですがjava.lang.IllegalArgumentExceptionというエラーが発生しました。
こちらで調べた結果このエラーは不正な引数、または不適切な引数をメソッドに渡したことを示すためにスローされる役割を持っている事が解りました。
以下はこのエラーが発生した所の記述です。(HTMLで記述してある所なので読みにくいとは思いますが・・・)
out.println(" <td class=\\\\"pt10\\\\"> <input name=\\\\"p_keisaidate1\\\\" type=\\\\"text\\\\" value=\\\\" " + Integer.toString(Integer.parseInt(new SimpleDateFormat("yyyyMMdd").format(strKeisaidate1))) + " \\\\" maxlength=\\\\"10\\\\" size=\\\\"12\\\\">");

どの引数が不正であるのか自分では検討がつかないので・・・・・・・
どうかご教示頂けるようお願い致します。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-01-06 12:45
strKeisaidate1 の型は何?
Date じゃないといけないんだけど、命名からすると String のニオイがする。
うさぎ鍋
会議室デビュー日: 2004/12/22
投稿数: 16
お住まい・勤務地: 静岡
投稿日時: 2005-01-06 13:06
返答ありがとうございます。
strKeisaidateの型はご指摘があった通りStringです。
パラメータを取得している部分、変数を初期化している部分が以下の記述になります。

//パラメータ取得
String strReleasenoPara = request.getParameter("p_releaseno");
String strYearPara = request.getParameter("p_year");
String strMonthPara = request.getParameter("p_month");
String strShoriPara = request.getParameter("p_shori");
String strFlagPara = request.getParameter("p_flag");
String strReleaseyearPara = request.getParameter("p_releaseyear");
String strReleasemonthPara =request.getParameter("p_releasemonth");
String strReleasedayPara =request.getParameter("p_releaseday");
String strReleasehour1Para = request.getParameter("p_releasehour1");
String strReleaseminute1Para = request.getParameter("p_releaseminute1");
String strReleasehour2Para = request.getParameter("p_releasehour2");
String strReleaseminute2Para = request.getParameter("p_releaseminute2");
String strFilenamePara = request.getParameter("p_filename");


//変数初期化
String strReleaseno = null;
Date dateReleasedate = null;
String strKeisaidate1 = null;
String strKeisaidate1_2 = null;
String strKeisaidate2 = null;
String strKeisaidate2_2 = null;
String strTitle = null;
String strSubtitle1 = null;
String strSubtitle2 = null;
String strSubtitle3 = null;
String strPdf = null;
String strNaiyou = null;
String strNaiyou2 = null;
String strKengenflag = null;
int intReleasenomax = 0;
String strReleaseyear = null;
String strReleasemonth = null;
String strReleaseday = null;
String strFilename = null;
int intCount = 0;
int intFormno = 0;
String strSqlcode = null;
String strSqlerrm = null;

こちらでもStringをDateにしてやって見たのですが同じ結果が返ってきてしまうので・・・・

[ メッセージ編集済み 編集者: うさぎ鍋 編集日時 2005-01-06 13:08 ]
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-01-06 13:21
スタックトレース見れば、エラー行だけでなく、どのメソッド呼び出しでエラーが出ているかわかるはずだけど?

とりあえず余計なことしないで、もっとも疑わしい次のコードがちゃんと通ることを確認して。
コード:
new SimpleDateFormat("yyyyMMdd").format(strKeisaidate1);


それと、素人は 1行 1命令で変数に代入が基本。メソッド呼び出しを入れ子にしないように。
スタックトレースを見て原因を負えないようなレベルであれば、なおさら。
うさぎ鍋
会議室デビュー日: 2004/12/22
投稿数: 16
お住まい・勤務地: 静岡
投稿日時: 2005-01-06 13:42
指摘された行を通っているか確認した結果しっかり通っていました。
再度Dateにしてやってるとこちらも通ったのですが別のところに同じエラーが発生しました。

//SQL設定
sql = "";
sql = sql + "SELECT releaseno, releasedate, keisaidate1,to_Char(keisaidate1, 'HH24')keisaidate1_2, keisaidate2,to_Char(keisaidate2, 'HH24')keisaidate2_2, title, subtitle1, subtitle2, subtitle3, pdf";
sql = sql + " FROM TOKAI.TKN_TEMP_RELEASE_HEAD";
if(!(strFlagPara.equals("0"))) {
sql = sql + " WHERE releaseno = '" + strReleasenoPara + "'";
}
//ステートメント作成
st = cn.createStatement();
//SQL実行
rs = st.executeQuery(sql);
if(rs.next()) {
strReleaseno = rs.getString("releaseno");
dateReleasedate = rs.getDate("releasedate");
dateKeisaidate1 = rs.getDate("keisaidate1");
dateKeisaidate1_2 = rs.getDate("keisaidate1_2");
dateKeisaidate2 = rs.getDate("keisaidate2");
dateKeisaidate2_2 = rs.getDate("keisaidate2_2");
strTitle = rs.getString("title");
strSubtitle1 = rs.getString("subtitle1");
strSubtitle2 = rs.getString("subtitle2");
strSubtitle3 = rs.getString("subtitle3");
strPdf = rs.getString("pdf");
}
//レコードセットクローズ
rs.close();
//ステートメントクローズ
st.close();

以上がエラーが出た付近の記述です。(エラーの発生した記述は dateKeisaidate1_2 = rs.getDate("keisaidate1_2");です。)



[ メッセージ編集済み 編集者: うさぎ鍋 編集日時 2005-01-06 13:44 ]
うさぎ鍋
会議室デビュー日: 2004/12/22
投稿数: 16
お住まい・勤務地: 静岡
投稿日時: 2005-01-06 13:59
どやらKeisaidate1はString型でよさそうです。
PL/SQLをJavaのプログラムに書き換えているので元のソースが

p_releaseno VARCHAR2 := '',
p_year VARCHAR2 := 0,
p_month VARCHAR2 := 0,
p_shori NUMBER := 0,
p_flag NUMBER := 0,
p_releaseyear VARCHAR2 := '',
p_releasemonth VARCHAR2 := '',
p_releaseday VARCHAR2 := '',
p_releasehour1 VARCHAR2 := '',
p_releaseminute1 VARCHAR2 := '',
p_releasehour2 VARCHAR2 := '',
p_releaseminute2 VARCHAR2 := '',
p_filename VARCHAR2 := ''

IS
v_releaseno TOKAI.TKN_RELEASE_HEAD.releaseno%TYPE;
v_releasedate TOKAI.TKN_RELEASE_HEAD.releasedate%TYPE;
v_keisaidate1 TOKAI.TKN_RELEASE_HEAD.keisaidate1%TYPE;
v_keisaidate2 TOKAI.TKN_RELEASE_HEAD.keisaidate2%TYPE;
v_title TOKAI.TKN_RELEASE_HEAD.title%TYPE;
v_subtitle1 TOKAI.TKN_RELEASE_HEAD.subtitle1%TYPE;
v_subtitle2 TOKAI.TKN_RELEASE_HEAD.subtitle2%TYPE;
v_subtitle3 TOKAI.TKN_RELEASE_HEAD.subtitle3%TYPE;
v_pdf TOKAI.TKN_RELEASE_HEAD.pdf%TYPE;
v_naiyou VARCHAR2(32767);
v_naiyou2 TOKAI.TKN_RELEASE_BODY.naiyou%TYPE;
v_kengenflag TOKAI.TK_GYOUSYA.kengenflag%TYPE;
v_releaseno_max TOKAI.TKN_RELEASE_HEAD.releaseno%TYPE;
v_releaseyear VARCHAR2(20);
v_releasemonth VARCHAR2(20);
v_releaseday VARCHAR2(20);
v_filename VARCHAR2(50);
v_count NUMBER := 0;
v_formNo NUMBER := 0;

となっているので恐らくKeisaidate1はstrKeisaidate1で良いと思われます。

[ メッセージ編集済み 編集者: うさぎ鍋 編集日時 2005-01-06 14:04 ]
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-01-06 14:06
意味不明。

「Dateにしてやって見たのですが同じ結果が返ってきてしまう」と言っていたと思ったら、「再度Dateにしてやってるとこちらも通った」ってどういうこと?

引用:

エラーの発生した記述は dateKeisaidate1_2 = rs.getDate("keisaidate1_2");です。



データベースの keisaidate1_2 の列の型は何? 列の型は 日付型であることが望ましい。ただし、JDBC ドライバおよび DBMS の実装によっては 文字型項目に日付として認識できる書式('YYYY/MM/DD' など) で文字列が格納されていれば、getDate() できるものもある。数値型でも同様。

とりあえず、あなたデバッグ丸投げのようなので私は撤収します。さようなら。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-01-06 14:12
引用:

どやらKeisaidate1はString型でよさそうです。


根拠はなんですか? VARCHAR2 だからですか? 私が strKeisaidate1 が Date でないといけないと言っているのは SimpleDateFormat#format() が Date 型の引数を取るからです。

Java の型 と Oracle の型の区別が付いていないようですから、ギブアップすることをオススメします。あなたには荷の重い仕事だったということであきらめなさいな。

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