WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:処理待ちの方法

0:[投稿] ウッチー [2004/04/06 09:19 ][環境:Win2000 Linux]

Java(J2SDK1.3.1)、PostgreSQL7.3.2を使用してシステム開発を行っています。今、壁にぶち当たっています。sqlにて呼び出したテーブルをWhile文で繰り返し、その中で他のテーブルをsqlにて呼び出して参照したいと思っています。

sql = "SELECT * FROM Atable";
while(Atable.next()){
      ・
      ・処理A
      ・
   sql = "SELECT * FROM Btable";
   Btable.next();
        ・
        ・処理B
        ・

   処理Aの続き

}

上記のように作成していますが、処理Bが終了していないのに、
処理Aが進んでしまいます。処理Aを処理待ちの状態にするなど
しないといけないのでしょうか?Javaのスキルが浅くてわかり
ません。どなたかわかる方がいましたら、よろしくお願いします。


1:[回答] バギンズ [2004/04/08 01:56 ]

私もJavaには詳しくはないのですが、基本的に全てのプログラムは、連続したコードが意図しないで勝手にタスク生成を行うなどということはありません。

単なる処理上のバグである事も考えられますが、もしかすると処理Bの中のどこかで再度処理Aを動かすようなイベントが発生するようなコードがあるのではないでしょうか?

または、サーブレット等で複数のクライアントからの同時アクセスが発生しているにもかかわらず、排他処理を行っていないのでしょうか?

何れにしても、Web系の掲示板よりJava系の掲示板で、もっと具体的な質問した方が解決が速いかもしれません。

#ところで、Javaでデータベースにアクセスする時って、
#いきなりnextするものなのでしょうか?
#私の他言語での経験では、いきなりnextすると
#1番目のデータを捨てて2番目のデータを引っ張って
#きていたと思うのですが...


2:[回答] abc [2004/04/08 10:28 ]

>#ところで、Javaでデータベースにアクセスする時って、
>#いきなりnextするものなのでしょうか?
>#私の他言語での経験では、いきなりnextすると
>#1番目のデータを捨てて2番目のデータを引っ張って
>#きていたと思うのですが...

「JDBCではカーソルは、一番最初は、一行目の一つ前に置かれることになっています」
とかかれてますが、これってJDBCだけなんでしょうか・・・

http://www.wakhok.ac.jp/~maruyama/j2ee/j2ee/node23.html


3:[関連] abc [2004/04/08 10:29 ]

すいません。「関連」に変更するの忘れてました・・・


4:[回答] B-Cus [2004/04/08 10:35 ]

> #ところで、Javaでデータベースにアクセスする時って、
> #いきなりnextするものなのでしょうか?

いきなり next で OK です。こんな感じで書きます。

  Statement stmt = con.createStatement();
  ResultSet rs = stmt.executeQuery("select col from hoge");
  while(rs.next()){
    out.println(rs.getString("col"));
  }


元質問については、どこで executeQuery してるの? 毎ループごとに
executeQuery してないんじゃないの? と思いました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World