getUpdateCount( )でDelete件数を取得できるか?

このQ&Aのポイント
  • javaを始めたばかりの初心者ですが、SQLの結果件数の取得で悩んでいます。Update件数の取得は出来るのですが、DELETE件数の取得が出来ないのです。
  • 作業環境はpostgreSQL 7.2.1とJAVA 1.3.1_04です。Update件数の取得は正常に行えますが、DELETE件数の取得が1件になってしまいます。
  • ご助言いただけると幸いです。
回答を見る
  • ベストアンサー

getUpdateCount( ); でDelete件数を取得できますか?

はじめまして。 javaを始めたばかりの初心者です。 SQLの結果件数の取得で悩んでいます。 Update件数の取得は出来るのですが DELETE件数の取得が出来ないのです。 作業環境は   postgreSQL 7.2.1    JAVA 1.3.1_04             です。 ++++ソース抜粋++++ stmt.executeUpdate(Updateクエリ); //今回のアップデート完了件数 int upd_cnt = stmt.getUpdateCount();   ↑きちんと取得できます。 stmt.executeUpdate(DELETEクエリ); //今回のデリート完了件数 int del_cnt = stmt.getUpdateCount();   ↑なぜか1件になってしまいます。 どなたかご助言ください。 よろしくお願いいたします。

noname#2686
noname#2686
  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • covachan
  • ベストアンサー率38% (46/120)
回答No.1

戻り値は行数ではなくカーソルの位置だからではないでしょうか? INSERTの場合は最後の行に追加されるのでカーソルは最後の行に移り その最後の行数を返しますが、DELETEの場合処理する行は消失しますから 単に先頭に行が移動して1が返るのではないでしょうか?

noname#2686
質問者

お礼

covachanさんご回答ありがとうございました。 参考URL拝見いたしました。 私の中にカーソルという概念が無かったので とても勉強になりました。 バージョン変更等出来ない都合があるので 別の方法を考えようと思います。 わかりやすい即レス、本当にありがとうございました。

その他の回答 (1)

  • covachan
  • ベストアンサー率38% (46/120)
回答No.2

すみません。 あまりに自身がないので調べてみました。 私の英語理解力が足りているならば、どうやらバグのようです。 参考URLをご覧になっていただければわかると思います。 もし、7.0.2以降のJDBCドライバがあれば試してみればどうでしょうか?

参考URL:
http://www.mit.edu/afs/net/project/postgres/7.0.2/src/interfaces/jdbc/CHANGELOG

関連するQ&A

  • SQLite3(PDO)でクエリー件数を取得したい

    SQLite3をPHPで使用しています。 ネットでいろいろ見たのですがわかりませんでしたのでこちらで質問させて頂きました。 SELECTで条件に合うidを抽出した場合にその行数を取得したいのですが、どのようにするとスマートに取得できるのでしょうか? スマートにというのは「データベースへのアクセスが一度で済むような」という意味です。抽出データの取得と件数の取得が一度のアクセスで可能なのでしょうか? $pdo = new PDO(sqlite:test.db); $query = $pdo->prepare('SELECT id FROM testTable WHERE id > 0 AND id < 10'); $query->execute(); 私が現在行なっているのは、データ抽出は上記のコードでやって、件数の取得は以下のようにしています。 $query = $pdo->prepare('SELECT count(*) FROM testTable WHERE id > 0 AND id < 10'); $query->execute(); $num = $query->fetch(PDO::FETCH_NUM); echo $num[0]; ネットで調べてもMySQLやPostgreSQLのことしか載っていなく、なかなかSQLite3での取得方法がわかりません。 お手数ですが教えて頂ければと思います。よろしくお願い致します。

  • delete,updateのクエリ実行で削除更新されたレコード数を取得したい!

    deleteやupdateのクエリをmysql_query()で実行したとき、 結果がtrueかfalseで返ってきてしまいますが、 削除や変更されたレコード数を取得する方法、関数はありませんでしょうか? ご回答宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 市区町村の表示と件数

    東京都 足立区(~件) 北区(~件) 墨田区(~件)………  神奈川県 横浜市(~件) 川崎市(~件)…………  上記のような形で、データベースからデータを取得して、エリアの横に件数を表示させるPHPを作成したのですが表示速度が遅すぎて困っています。ソースは以下です。1番目のテーブルで、指定した都道府県の市区町村データを取得してから、2番目のテーブルでそれに合致する物件データの件数を取得するというものです。表示速度を改善する方法はありますでしょうか? //ソース $sql_area = "SELECT * FROM エリアのテーブル WHERE area = '東京都'"; $result_area = mysql_query($sql_area); for($i = 0; $i < mysql_num_rows($result_area); $i++){ $arr_area = mysql_fetch_array($result_area); $sql_cnt = "SELECT * FROM 全物件のデータ WHERE 市区町村 = {$arr_area[市区町村]}; $result_cnt  = mysql_query($sql_cnt); $category_cnt = mysql_num_rows($result_cnt); echo $arr_area[区名]({$category_cnt}件); }

    • ベストアンサー
    • PHP
  • DELETE構文

    今、PostgreSQLの中にあるデータを 削除しようとしていますが、構文がDELETE構文が正しくなく 上手く削除することができせん。 環境→WindowsXP register_globals=offです。 ※フォームの部分は、文字制限の為、省略させて下さい。 画面構成 //ここにPostgreSQLから取得されたデータが //乗っています。 ID[入力欄] Name[入力欄] Score[入力欄] (削除ボタン) 構文 //PostgreSQLに接続 $conn = pg_pconnect("user=postgres password=grjtf dbname=mytbl"); //登録データを削除する if(isset($_POST["action"]) && $_POST["sign"] == '一行削除') { //IDが書かれていた場合 if($_POST["id"]) { //データを削除する $sql3="DELETE FROM mytb(id) WHERE $_POST['id'] = ('{$_POST['id']}')"; //データベースに問い合わせて、クエリを実行する pg_query($conn,$sql3); //成功メッセージ print "データを一件削除しました。<br>"; } else { //失敗メッセージ print "IDが書かれていないため、削除できません。<br><br>"; } }

    • 締切済み
    • PHP
  • C++ WMI レコード件数取得方法

    お世話になっております。 C++でWMIを使用して、別PCのディスク容量を取得しようと思っています。 SQLの検索結果の「レコード件数」を取得する方法はありますでしょうか? (レコード件数で配列サイズを決めようとしています) ADOとかだとRecordCountとかで取得出来るのですが・・・。 COMオブジェクトで、IUnknownインターフェイスを使っているらしいので、 それの参照カウントって物の件数を調べられたら可能かとも考えましたが、 わかりませんでした・・・。 すみませんがご教授ください>< 以下が記述途中のソース抜粋です。 ===== HRESULT hres; ULONG uReturn = 0; IWbemServices *wbem_services = NULL; IEnumWbemClassObject *wbem_enumerator = NULL; IWbemClassObject *pclsObj = NULL; unsigned long *DiskSize; //本当はクラス使用です。 hres = wbem_services->ExecQuery(L"WQL", L"SELECT * FROM Win32_LogicalDisk WHERE DriveType=3", WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &wbem_enumerator); ↓↓↓↓↓ //ここで、RecordCountのように件数を取得がしたい。 DiskSize = new int[wbem_enumerator->RecordCount]; ↑↑↑↑↑ while (hres == S_OK) { hres = wbem_enumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); } delete [] DiskSize;

  • mysqlのデータをPDOでDELETEできない

    PDOオブジェクト(PHP)を使用したmysqlのデータ削除について、質問させてください。 PDOオブジェクトを使用して、mysqlのデータ読み込み・削除を行っています。 特定のデータを読み込み、処理を行わせた後、対象のデータの削除をしたいのですが 読み込みは出来るのに、削除で失敗してしまいます。 処理を行わせるSQLをvar_dumpで出力させ、 それを直接phpMyAdminでSQL実行してみたのですが、 問題なく削除が行われています。 SQLの問題ではなく、PHP側の問題だと思うのですが、 解決方法が見つかっておりません。 知恵を貸していただけないでしょうか。 $post_data = explode('¥t', $_POST['data_array']); $user_id = $post_data[0]; $account_name = $post_data[1]; $data_id = $post_data[2]; $gunre_id = $post_data[3]; try { // DB接続 $dbh = new PDO($serverInfo["SERVER"], $serverInfo["USER"], $serverInfo["PASS"]); $dbh -> query('SET NAMES utf8'); // 処理させる対象アカウント情報を取得 $sql_account; $sql_account = 'SELECT * FROM '. $serverInfo['TBL_ACCOUNT']. ' WHERE GUNRE_ID = :gunre'; } $stmt_account = $dbh -> prepare($sql_account); $stmt_account -> bindParam(':gunre', $gunre_id, PDO::PARAM_STR); $stmt_account -> execute(); while($account = $stmt_account -> fetch(PDO::FETCH_ASSOC)) { // 取得してきたデータを使用して処理 // この処理は正常に行われているので、SELECTは正常に行われていると考えられます } // 処理が完了したら、データを削除 // ↓ここで組み立てたSQLを出力し、phpMyAdminでSQL実行すると、データは削除されました $sql_delete = 'DELETE FROM '. $serverInfo['TBL_DATA']. ' WHERE USER_ID = "'. $user_id. '" AND ACCOUNT_NAME = "'. $account_name. '" AND DATA_ID = "'. $data_id. '"'; $stmt_delete = $dbh -> prepare($sql_delete); // ↓元々はbindParamで指定していたのですが、処理が出来なかったので // $SQL_deleteの中に値を埋め込み、処理を行わせました。結局出来なかったのですが・・・ // $stmt_delete -> bindParam(':id', $user_id, PDO::PARAM_STR); // $stmt_delete -> bindParam(':account', $account_name, PDO::PARAM_STR); // $stmt_delete -> bindParam(':data', $data_id, PDO::PARAM_STR); $result = $stmt_delete -> execute(); var_dump($result); // ←出力結果は「false」です } catch (Exception $ex) { echo '<font color="red">システムエラーが発生しました</font><br />'; exit(); } 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数のformから値を取得する方法

    AというASPには複数のformがあります。 DBの取得結果を表示しており、countには取得件数が入ってます。 また、件数分同じformがあり、判別はnameにて行っています。 検索件数<%=count %>件 <input type="button" value="一括修正" action="Update()"> <% Do Until rs.EOF %> <form method="POST" target="main" name="updatename<%=ii%>"> <input type="hidden" name="no" value="<%= rs.Fields.Item("NO").Value %>" … </form> … <% ii= ii+1 rs.MoveNext Loop%> 受け取り側のBというASPでは <form method="POST" name="update"> <%For i = 1 To count%> <input type="hidden" name="no<%=i%>" value="<%=Server.HTMLEncode(Request.Form("No" & i)) %>"> <%Next%> </form> のようにループにて送信側のデータを取得しています。 このAとBの間をjavascript(外部ファイル)にてやろうと思っています。 Javascript(データ受け渡し) function Update() { var Cnt for (Cnt=1; Cnt<count ; Cnt++){ // 件数分ループ var No(Cnt) = document.all.updatename(Cnt).no.value; document.update.no(Cnt).value=No(Cnt); } document.update.action = "B.asp"; document.update.target = "main"; document.update.submit(); } やりたい事は、Aというファイルにある複数のformから値を取得し、Bというファイルにある項目に設定する、という事なのですが、上手くいきません。 ・Aというページの件数をjavascriptで使用する方法 ・Aというページの複数formから値を取得する方法 document.allを使用すると上手くいく、とネットで検索してわかったのですが、いまいち使用方法がわからず、こまっています・・・。 どうか宜しくお願いします。

  • 複数Formから値を取得するやりかた

    AというASPには複数のformがあります。 DBの取得結果を表示しており、countには取得件数が入ってます。 また、件数分同じformがあり、判別はnameにて行っています。 検索件数<%=count %>件 <input type="button" value="一括修正" action="Update('<%=count %>')"> <% Do Until rs.EOF %> <form method="POST" target="main" name="updatename<%=ii%>"> <input type="hidden" name="no" value="<%= rs.Fields.Item("NO").Value %>" </form> <form method="POST" target="main" name="updatename<%=ii%>">… <% ii= ii+1 rs.MoveNext Loop%> 受け取り側のBというASPでは <form method="POST" name="update"> <%For i = 1 To count%> <input type="hidden" name="no<%=i%>" value="<%=Server.HTMLEncode(Request.Form("No" & i)) %>"> <%Next%> </form> のようにループにて送信側のデータを取得しています。 このAとBの間をjavascriptにて行いたいのです。 Javascript(データ受け渡し) function Update(count) { var No = new Array(); for (Cnt=1; Cnt<count ; Cnt++){ // 件数分ループ No[Cnt] = document.all.updatename(Cnt).no.value; document.update.no(Cnt).value=No[Cnt]; } document.update.submit(); } やりたい事は、Aというファイルにある複数のformから値を取得し、Bというファイルにある項目に設定する、という事なのですが、上手くいきません。 ・複数のformからデータを取得する方法 document.allを使用すると上手くいく、とネットで検索してわかったのですが、いまいち使用方法がわからず、こまっています…。 どうか宜しくお願いします。(ちなみに1つのFormで、というのは仕様上不可能です)

  • SpringのHibernate連携での条件指定delete

    お世話になります。 spring-framework-1.2.8 hibernate-3.1 でwebアプリの開発を行っております。 宣言的トランザクション管理でDAO作成するために、 HibernateTemplate(org.springframework.orm.hibernate3.support.HibernateDaoSupport#getHibernateTemplate()で取得しています) の各種メソッドでDBアクセスしていますが、条件付delete発行の方法がわかりません。 find()にはクエリ文字列を渡して検索するメソッドがあるのですが、delete()やupdate()にはクエリ文字列を受け取るメソッドがないようです。 HibernateTemplateを使用して条件付delete(SQLのdelete form xxx where xx=x の発行)やupdateは出来ないのでしょうか。 また、条件付deleteはどのように実現すればよいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • PHP/MySQL レコードの件数の取得COUNT

    ホームページを作っています。 レコードを検索したりカテゴリ別に絞り込んだりすることもできるようにしています。 レコードを閲覧しやすくするために、「前へ[0][1][2]次へ」のようなものをつけようとおもっています。 ところが、それをするためにはレコードの全ての数を取得しなければいけません。 全てのレコードを取得してそれからPHPの関数で件数を取得する方法もありますが、処理としてはスマートじゃないと思い、COUNT関数を使うべきなのかなと思いました。 なので、それで組んでみたんですけれど、カテゴリ別で絞り込むときに値が1にしかならないのです。 以下がソースです。 ※#musicNumに件数が入ります。 $textFilterの例「あつい」 $tags_forWhereの例「pop,dance」 $musicNum = mysql_query("SELECT COUNT(*) as cnt FROM contents_tags bt, mymusic b, tags t WHERE (b.number LIKE '%{$textFilter}%' OR b.title LIKE '%{$textFilter}%' OR b.text LIKE '%{$textFilter}%' ) AND bt.TAG_ID = t.ID AND (t.TAG IN ($tags_forWhere)) AND b.number = bt.CONTENT_ID GROUP BY b.number ORDER BY number DESC"); $musicNum = mysql_fetch_assoc($musicNum); $musicNum = $musicNum['cnt']; タグ機能はToxi法を使っています。 どこがおかしいのかご教授願いします。

    • 締切済み
    • PHP

専門家に質問してみよう