- PR -

原因不明の動作不良か発生!!

1
投稿者投稿内容
jokers
ベテラン
会議室デビュー日: 2002/08/04
投稿数: 73
投稿日時: 2003-11-22 19:45
現在 自宅のwebサーバに商品販売及び買い物カゴを作成中でございますが、以下の動作不良が発生しましたので、皆様のお知恵を拝借させて頂きたく筆をとりました。

 稚拙なコードで大変申し訳ございませんが以下の通りを記述しました。

 ServletContext context=getServletConfig().getServletContext();
 String handlename=(String)(context.getAttribute("handlename"));
 System.out.println(" handlename "+handlename);
 String name=(String)(context.getAttribute("IDname"));
 System.out.println("name "+name);
 int itemShurui=Integer.parseInt((String)(context.getAttribute("ItemShurui")));
System.out.println("itemShurui "+itemShurui);

for(int k=0;k<itemShurui; k++)
{
//cartサーブレットweedを取得する
String weed=(String)(context.getAttribute("weed"+Integer.toString(k)));
String t=(String)(context.getAttribute("count"+Integer.toString(k)));
System.out.println("t "+t);
int n=Integer.parseInt(t);
StringTokenizer st=new StringTokenizer(weed,"#");
String shouhinIndex=st.nextToken();
System.out.println("shouhinIndex "+shouhinIndex);
String shouhinNumber=st.nextToken();
System.out.println("shouhinNumber "+shouhinNumber);
String shouhinName=st.nextToken();
System.out.println("shouhinName "+shouhinName);
String price=st.nextToken();
long price_util=Integer.parseInt(price);
long sum=price_util*n;
//SQL文1を実行する
String sqlQuery1="SELECT * FROM scratch where handlename=\'"+handlename+"\'";
System.out.println(sqlQuery1);
ResultSet resultset1
= statement.executeQuery( sqlQuery1);
System.out.println(resultset1);
String address=null;
String telNumber=null;
String EmailAddress=null;

while( resultset1.next()){
address=resultset1.getString("address");
System.out.println("address "+address);
telNumber=resultset1.getString("tel");
System.out.println("telNumber "+telNumber);
EmailAddress=resultset1.getString("EmailAddress");
System.out.println("EmailAddress"+EmailAddress);


//SQL文2を実行する
String sqlQuery2= "INSERT INTO scratchShouhin Values ('"+name+"','"+handlename+"','"+address+"','"+telNumber+"','"+EmailAddress+"','"+shouhinName+"',"+price_util+","+n+","+sum+")";
System.out.println("sqlQuery2 "+sqlQuery2);
ResultSet resultset2= statement.executeQuery( sqlQuery2 );
  System.out.println(resultset2);

見積書のデータをweedという商品別の一塊のデータとして取得して、また別途用意してある別途データをハンドルネームをキーとして取得、2つのデータを商品発注用のデータベースとして追加書き込みするものです。
本来であれば商品数に応じてデータベースに書き込みされるハズですが最初のループの最後まで終わったで処理が止まってしまいます。
 コンソール出力としては
 shouhinIndex 0
shouhinNumber B0610001
shouhinName タタミベッドBO6シングル
SELECT * FROM scratch where handlename='goronyan'
sun.jdbc.odbc.JdbcOdbcResultSet@1875da7
address 省略
telNumber 省略
EmailAddres 省略
sqlQuery2 INSERT INTO scratchShouhin Values ( 省略)
本来ならここから2廻り目のループの処理となるはずですがこれ以上処理されません。
こんな基本的な質問をするのは大変申し訳ございませんが宜しくお願い申し上げます。

[ メッセージ編集済み 編集者: jokers 編集日時 2003-11-22 19:44 ]
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2003-11-22 21:47
DML文はexecuteQueryでは実行しません。

_________________
_/_/_/
_/うちの会社の変なところ〜
_/1条.毎年300人新卒採用
_/2条.大事な事項(就業規則等)の変更発表は、施行前日
_/(以下略)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-11-23 22:08
切り分けのためにコードをもっとシンプルにしてみてはいかがでしょうか?
まずやりたいこと全部実装しなくてもいいですから。

その方が第三者もコードを見る気にもなれますよ。

標準出力は "shouhinIndex 0" から始まっているのですか?ループ回数のキーとなる itemshurui はどうなっているんでしょうか?

また、「商品数に応じてデータベースに書き込みされるハズ」とのことですが、商品数は固定なのでしょうか?
コンテクストパラメータからループ回数を取得しているのであればループ回数は毎回同じになってしまうそうですが・・・
1

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