• 締切済み

ループ処理の中におけるDB接続について(java)

ループ処理の中におけるDB接続について、接続→切断を繰り返すと処理速度が落ちますよね。 これを回避するにはSQLでできる限り取得するのが良いと思われますが、その他にプログラムで 回避することはできますかね? whileの中でさらにSQLを使用する必要があります。 どなたかご教授願います。

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • heka_11
  • ベストアンサー率0% (0/1)
回答No.2

Connectionを使用してDBへ接続しているのであれば 接続したコネクションを閉じるまでは接続されたままです。 またConnection等はtry-catch文のfinally句の中で クローズ処理をするとエラー発生時にもしっかりと 接続を切断することができます。

noname#147388
noname#147388
回答No.1

Jdbc接続は1回の接続につき1SQLではないですよ。

関連するQ&A

  • 誰がDBに接続しているのか知りたい

    こんにちは、いつも参考にさせて頂いております。 SQL Server2008でDBを管理しているのですが、 かゆいところに手が届かない状況です。どうかお助けください。 [状況] 今管理しているDBは複数個あり、各DBに接続している人は複数います。 (といっても2ケタにも行きませんが。) そんな中、テーブルのプロパティなどを変更したいときに、 誰かが接続していると排他エラーが出て変更できないことがあります。 [疑問点] こういう時に、誰が接続しているのか知りたいのですが、 どうすればよいのでしょうか? 監視ツールなどが必要でしょうか。 もしくはシステムテーブルなどにその情報があるのでしょうか? どうかご教授よろしくお願いいたします。 [環境] SQL Server2008 Windows Server2008

  • PHP プログラム ループ処理

    プログラム初心者です、ループ処理についてうまい解決方法が思い浮かばず相談させて頂きます。 ループ処理において、ループ内で変数を定義するのに違う名前を指定するにはどのような方法があるのでしょうか 例えばwhileの場合 $i =0; while($i<10){ $hoge = $i; $i++ } この$hogeを2順目には$hoge1、3順目には$hoge2と言うように増やしたり一定の法則に乗っ取って変数名を変更するにはどのように書けばいいのでしょうか。 どなたかご教授頂ければと存じます、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • EXCEL2003 VBAで2つのDBに接続してSQLを実行し、異なる

    EXCEL2003 VBAで2つのDBに接続してSQLを実行し、異なるDBのTBLを結合する。 こんな方法あるのかどうかわかりませんが、 VBAでDBに接続する際に同時?に2つのDBに接続し1つのSQLで違うDB同士を任意のキーで結合はできるのでしょうか? どなたかわかる方お願いします。 今考えているのは最初に1つのDBに接続し、データを取得後、再度違うDBに接続し取得したデータを先ほどのデータとVBA内で結合しようと考えています。 ほかにいい方法があればアドバイスおねがいします。 ※今まではACCESSを介してこの処理を行っていましたが引継ぎの関係でEXCELのみでこの処理を  実行しなければなりません。

  • whileで最後のループを判別するには?

    環境:php5 Q. DBから取得した値をwhileでループさせたとき、最後のループを取得するにはどうしたらいいのでしょうか? 現状ではループさせる数を最初に取得して、whileさせているときに$i++でカウントさせながら、合計の数とイコールになったときに最後と判断させていますが、もっとスマートに記述する方法などはあるのでしょうか? smartyだとlastで取得できるみたいですけど。 ご教授いただけると幸いです。

    • 締切済み
    • PHP
  • シェル上でDBコマンドをループさせる方法

    こんにちわ。 取り急ぎ有識者の方にご教授いただきたい点があります。 シェル上にて、以下のようなことをやりたいのですが、上手くできません。 --ココから # /bin/sh sqlplus Userid/Passwd@sid while true <--無限ループ do exec dbms_mview.refresh('mview_name','c'); <--マテビュー(mview_name)を完全リフレッシュ done exit 0; --ココまで 上記のように、sqlplusにてDBにログインした後、 リフレッシュコマンドをlinuxコマンドのwhile文で挟んでしまうと、 「oracleに"while・・"のようなコマンドはありません。」 のようなエラーメッセージが出て怒られてしまいます。 こういった場合の回避策・正しい書き方をご教授ください。 よろしくお願いします。 P.S 因みに、上記のようなことをやりたい理由として、 DBへの負荷試験(※)を実施するのが目的となります。 ※断続的にリフレッシュを実行し続ける 無限ループでブン回し続けて、試験終了後、 Ctrl+[c]で停止する想定です。

  • DB参照&登録処理、どっちが高速?

    30日分の売り上げを登録するシステムをつくっています。 登録先はDBで、日付を主キーとして1レコードずつ増えていく感じですが、既に登録があるものについてはレコード有無の判断をして上書きにする必要があります。 処理を考えたところ、2パターンのどちらが高速か負荷が少ないのかで迷っており、助言をいただきたいと思い投稿しました。 <1> (1)DB接続 (2)既に登録されている日付を把握するため、レコードから日付を全て取得(select all) (3)登録しようとしている1日目の日付とDBから取得した日付を全て照合し、同一があれば上書き(update)、なければ登録(insert)で処理をする。 (これを30日分繰り返す) (4)DB切断 <2> (1)DB接続 (2)登録しようとしている1日目の日付をキーにDBに同一日での登録がないか参照(select)し、同一があれば上書き(update)、なければ登録(insert)で処理をする。 (これを30日分繰り返す) (3)DB切断 <1>はDB参照が一度で終わるので高速かなと思うのですが、参照結果を一度格納し、再度1つづつを比較としてひっぱってくるためあまり効率が良くないのかと悩んでいます。 アドバイスお願いいたします。

    • ベストアンサー
    • PHP
  • 【シェル】ループの中で対話処理をしたい

    unix上でシェルを書いています。 ループ内で対話形式で処理をしたいのですが、入力待ちとならないままループしてしまいます。 ループの中で、キーボードからの入力があるまで処理を待たせることは可能でしょうか。   test.txtの内容*** 花子 太郎 二郎 三郎   *************** このテキストを読み込んで年齢を入力してもらうという処理です。 読んだ後の処理はここでは省略します。 while read line; do    echo $line "この人の年齢を入力して下さい。"    read ymd            if [ "$ymd" = "" ]; then      echo "未入力です!"      exit 0        fi done < test.txt これを実行すると、入力をまたずに未入力、未入力、未入力…と標準出力されます。 1行読んだら、年齢を聞いて、入力があるまでは"read ymd"の処理を行わない、という ようにする方法をどうかご教授願います。

  • fetch中にDBアクセス

    お世話になります。 PERLでなくても、どの言語でもそうだと思うのですが、 通常、Selectで取得したデータを元に再度DB検索に行き、 違うデータを取得したい場合、fetchの中でさらにDB検索を行うかと思います。 (あまり処理としてはよくないとは思うのですが) 今回既存のプログラムに要件を追加するのですが、その際 上記のような処理を行いたいと考えています。 しかし既存のプログラムを見ているとそういう例がひとつもありません。 それがたまたまなのか、意図的なのかはわかりませんが、 意図的だとするとなにか理由があるのでは?と思い、投稿しました。 while ($rc = $DBr->fetchrow_hashref) {  while ($rc2 = $DBr->fetchrow_hashref){    } } というようにしたいのですが、1つ目の$DBr->finish が行われる前には PERLではできないよ、ということがあれば教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ストアドプロシージャで別DBに接続

    Oracleのマテリアライズドビューのデータを SQL Server 2008のDBに毎晩取り込む処理を作る必要があり、方法を検討中です。 SQL Serverが稼働しているWindows Server 2003のマシンから、 毎晩タスクで起動させて実行することを考えています。 SQL Serverのストアドプロシージャで実現できないかと考えているのですが、 ストアドプロシージャだけで実現可能でしょうか? Oracleに接続してビューのデータを取得し、それに基づいて、 SQL ServerのDB内のテーブルのデータ追加、更新、削除等を行います。 単純なコピーではなく、データ加工や変換等の処理も行います。 経験がないので、実現可能かというところから教えて下さい。 実現不可能なら、他にどのような選択肢があるか教えていただけると助かります。 よろしくお願いします。

  • MySQL 複数のDB接続で上書きされる

    あるphpファイル内の最上段で、 二つのデーターベース接続を行っています。 二つのdsnを使ってそれぞれDBにコネクトしています。 例えばこんな感じです。 //ページ先頭で $mdb2 = db_connect(); //関数内でコネクトされています。 $mdb2_a = db_connect_a(); //関数内でコネクトされています。 で、最初の$mdb2内に格納されているDB接続情報を、 そのphpファイル内で使いまわそうとすると、 後から作られた$mdb2_aに上書きされるようで、$mdb2は使い道がなくなります。 コレを回避する方法としては、 dsnの割り当て情報に、'new_link' => true を追加したり、SQLセーフモードをオンにしたりと、 小細工すれば上手くいくようですが、 これらの方法を使わずにすむ方法はないものでしょうか? 一つのphpファイルで二つのDBに接続しない方法を模索すればいいかもですが、 その手法はないものとして、知恵をお貸しください。 各SQLの発行前にその都度、DB接続を行えばいけるようですが、 分散トランザクションを行い、上記のように二つのDB接続をトランザクション前に取得しようと考えております。 分散トランザクションであっても、その過程内でその都度DB接続しても遅延等で問題が起こらないでものでしょうか? どうもDBの接続ってものすごく処理に負荷がかかる気がして・・・・。 何かいい方法を教えていただきますと助かります。 よろしくお願いします。

専門家に質問してみよう